我有一个应用程序,它有两个viewcontrollers Viewcontroller和OptionsViewController。 Viewcontroller是初始的viewcontroller然后如果我点击一个按钮我有一个modal segue到optionsviewcontroller。在optionsviewcontroller我有我从故事板创建的UISegmented viewcontroller链接到插座(UnitsSegmentedControl),我希望能够告诉分段控件默认情况下,当OptionsViewController加载时应该选择哪个段。 在我的Viewcontroller中,我写了一个方法:
-(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方法中做到这一点?
答案 0 :(得分:4)
在加载OptionsViewController之前,分段控件不存在,这就是为什么不能在ViewController的prepareForSegue方法中设置所选段的原因。查看UISegmentedControl类参考显示无法设置默认状态:
"在用户触摸片段之前,默认值为UISegmentedControlNoSegment(未选择片段)。将此属性设置为-1可关闭当前选择。当控件处于瞬时模式时,UISegmentedControl忽略此属性。当用户触摸段以改变选择时,生成控制事件UIControlEventValueChanged;如果分段控件设置为响应此控件事件,则会向其目标发送操作消息。"
在OptionsViewController的viewDidLoad方法中设置selectedSegmentIndex是设置视图控制器默认值的正确方法。
答案 1 :(得分:3)
如果您想以编程方式执行此代码,请使用此代码
segmentControl.selectedSegmentIndex=-1;
如果要从nib设置它,那么在界面构建器中只需取消选中索引
的选定属性