2012-01-14 34 views
5

我有一個應用程序有兩個viewcontroller Viewcontroller和OptionsViewController。 Viewcontroller是最初的viewcontroller然後如果我點擊一個按鈕,我有一個模式賽格到optionsviewcontroller。在optionsviewcontroller裏面我有我從故事板創建的UISegmented viewcontroller,它連接到一個插座(UnitsSegmentedControl),我希望能夠告訴分段控件在OptionsViewController加載時應該默認選擇哪個段。 在我的viewController我寫了一個方法:在UISegmentedControl中設置默認段

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
OptionsViewController *ovc=[segue destinationViewController]; 
ovc.delegate=self; 
[ovc.UnitsSegmentedControl setSelectedSegmentIndex:1]; 

的事情是,當OptionsViewController加載視圖中選擇的指數是0作爲默認。我沒有收到任何錯誤消息或什麼。 我正在使用Xcode 4.2。我想這可能是一些選項,我可以改變故事板,使UISegmentedControl能夠設置默認選定的索引。我不知道還有什麼可能造成的。謝謝

編輯: 我想通了,如果我寫:

[ovc.UnitsSegmentedControl setSelectedSegmentIndex:1]; 

內OptionsViewController方法viewDidLoad中一切正常。爲什麼我無法從準備segue方法中做到這一點?

回答

4

在加載OptionsViewController之前,分段控件不存在,這就是爲什麼您無法在ViewController的prepareForSegue方法中設置選定的段。回顧UISegmentedControl類參考顯示沒有辦法設置默認狀態:

「默認值是UISegmentedControlNoSegment(沒有選擇片段),直到用戶觸摸一個片段。將此屬性設置爲-1以關閉當前當控件處於瞬時模式時,UISegmentedControl忽略該屬性;當用戶觸摸一個段來改變選擇時,將產生控件事件UIControlEventValueChanged;如果分段控件被設置爲響應這個控件事件,它會發送一個動作消息傳遞給它的目標。「

在OptionsViewController的viewDidLoad方法中設置selectedSegmentIndex是設置視圖控制器默認值的正確方法。如果你想這樣做編程

segmentControl.selectedSegmentIndex=-1; 

如果你想從筆尖設置它,然後在界面生成器

+0

我找到了解決這個問題的方式指數的選定屬性通過在OptionsViewController中創建一個名爲index的屬性,並將其設置爲我希望直接從prepareforsegue方法中選擇的段編號,然後將它歸入視圖中的segmentviewcontrol進行加載。感謝您的幫助 – Mppl 2012-01-15 00:22:31

3

只要使用這個代碼只需取消