2011-05-03 53 views
5

我(尝试)使用可可框架在Xcode中开发我的第一个应用程序。如何在代码中接收滑块的当前值?

我有一个滑块,最小值为10,最大是50。这是选择最大的搜索结果。

我有联系我的用户界面上的标签,以显示滑块的值,当它移动时,它更新了用户界面上的标签。
但是,我试图加入4个字符串来创建我的最终URL,其中一个是所述标签的值。

我想阅读使用界面上的标签的价值创造完成的URL

NSString *startofURL = @"http://starturl.com/?q="; 
NSString *searchTerm = whatToSearch; 
NSString *middleofURL = "&max-results="; 
NSString *resultsStr = labelMaxResults.stringValue; //Problem here ?? 

我有2个问题;首先,我如何通过代码检索滑块的值,而不是试图从链接标签中获取它,因为我认为这是我的问题。

其次,我已经加入和附加串读了,但我有点困惑的是,以4串联合成一个长的URL中使用的最佳方法。

+0

在将它拼接到URL之前,不要忘记URL转义'whatToSearch'。 – 2011-05-03 21:10:31

+0

大家好,非常感谢大家的帮助,这非常有帮助。 – Steve 2011-05-04 00:28:47

+0

我遇到了示例代码中的绑定位遇到问题的困难,并且不断得到2011-05-04 01:27:33.307滑块[11856:a0f]无法从类SliderAppDelegate的对象创建双精度2011年12月4日 - 05-04 01:27:33.309滑块[11856:a0f] ***终止应用程序由于未捕获的异常'NSInternalInconsistencyException',原因:'无法从对象任何想法创建双?在绑定区域中,我只能将它绑定到我的SliderAppDelegate模型键路径也设置为self,我将其更改为sliderValue,如示例状态,但没有运气。谢谢 – Steve 2011-05-04 00:31:12

回答

6

对于你的问题的第一部分,这取决于你使用哪个程序使用哪个操作系统。

如果您使用的是OS X,让你的滑块价值的最好方法是创建在IB为您的滑块结合。为此,请单击IB中的滑块并转到绑定部分。在Value部分中,单击Value并选择您希望使用该值的类作为Bind To类(我将在此示例中使用MyClass)。然后对于模型关键路径,将其分配给您选择的某个值。为此,我将它称为sliderValue。

然后在MyClass.h,必须设置如下:

@interface MyClass : <your class type> { 
    int sliderValue; 
} 
@property (readwrite, assign) int sliderValue; 

在MyClass.m,你需要综合价值。

@synthesize sliderValue; 

在这一点上,你应该能够通过调用[self sliderValue]在代码中的任何一点,让您的滑块的值。

如果你是,但使用的是iOS,那么所有你需要做的就是调用从滑块的价值属性。所以如果你有一个UISlider *mySlider,你所要做的就是调用mySlider.value来获得滑块的当前值。

对于第二个问题,你可以采用这两种方法。如果要附加字符串,只需按照以下格式:

NSString *appendedString = @""; 
appendedString = [appendedString stringByAppendingString:string1]; 

等等,直到您将所有字符串放入您的URL为止。

在你的情况,我会亲自设置整个URL字符串作为stringWithFormat:

NSString *urlString = [NSString stringWithFormat:@"http://www.starturl.com/%@%@%@", whatToSearch, middleOfURL, resultsStr]; 

通过建立whatToSearch等插入你想要的值到URL这种方式,给你值想。这样,您就不必担心追加一切融合在一起

+1

由于'middleOfURL'是一个常量字符串,因此可以将它整合到格式字符串中,正如Kashiv在答案中所示。 – 2011-05-03 21:10:05

1

您的代码应该是这样的:

NSString *urlString = [NSString stringWithFormat:@"http://starturl.com/?q=%@&max-results=%f", whatToSearch, [slider floatValue]]; 

编辑:更正我的回答。对于UISlider,应该是属性。对于NSSlider你应该使用- floatValue方法

+0

只有'slider'是UISlider,而不是NSSlider。 – 2011-05-03 21:09:07

+0

啊,我认为这是UI元素...所以这应该是[slider floatValue]。 – akashivskyy 2011-05-03 21:13:51

+0

实际上对于NSSlider'-doubleValue'可能更好。 – JeremyP 2011-05-04 15:35:52

5
NSSlider * slider = [[NSSlider alloc] init]; 
    [slider setMinValue:50]; 
    [slider setMaxValue:150]; 
    int sliderValue = [slider intValue]; 

这不把你的滑块在屏幕上,但假设你在IB做到了,忽略了第一线,您可以设置最小值最大值和获得的价值。 可以做出这样的动作

- (IBAction为)sliderMoved:(ID)发送

然后绑定,为滑块,如果滑块设置为连续你会得到一次更新时间当你放开滑块时,它会变得更明智

-(IBAction)sliderMoved:(id)sender 
{ 
    sliderValue = [slider intValue]; 
    [self doSomethingElseNow]; 
} 
相关问题