2012-01-14 36 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

只要使用这个代码只需取消