2011-05-03 22 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]; 
} 
相關問題