【问题标题】:Setting default segment in UISegmentedControl在 UISegmentedControl 中设置默认段
【发布时间】:2012-02-10 08:03:46
【问题描述】:

我有一个应用程序,它有两个视图控制器 Viewcontroller 和 OptionsViewController。 Viewcontroller 是初始的 viewcontroller,然后如果我点击一个按钮,我就有一个到 optionsviewcontroller 的模态 segue。

在 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 中一切正常。为什么我无法通过 prepare for segue 方法做到这一点?

【问题讨论】:

    标签: ios5 xcode4.2 storyboard uisegmentedcontrol


    【解决方案1】:

    在加载 OptionsViewController 之前,分段控件不存在,这就是为什么您无法在 ViewController 的 prepareForSegue 方法中设置所选分段的原因。查看 UISegmentedControl 类参考,发现无法设置默认状态:

    "默认值为UISegmentedControlNoSegment(不选择段)直到用户触摸一个段。将此属性设置为-1以关闭当前选择。当控件处于瞬时模式时,UISegmentedControl忽略此属性。当用户触摸一个段来改变选择,控件事件 UIControlEventValueChanged 被生成;如果分段控件被设置为响应这个控件事件,它会向它的目标发送一个动作消息。"

    在 OptionsViewController 的 viewDidLoad 方法中设置 selectedSegmentIndex 是设置视图控制器默认值的正确方法。

    【讨论】:

    • 我找到了解决这个问题的方法,方法是在 OptionsViewController 中创建一个名为 index 的属性,并将其设置为我想直接从 prepareforsegue 方法中选择的段号,然后将其归因于视图中的 segmentviewcontrol 加载.感谢您的帮助
    【解决方案2】:

    如果您想以编程方式执行此代码,请使用此代码

    segmentControl.selectedSegmentIndex=-1;
    

    如果你想从 nib 设置它,那么在界面生成器中只需取消选中 index 的选定属性

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-04
      • 2017-07-28
      • 2015-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多