arc*_*bob 88

或者,在您更改selectedSegmentIndex调用'sendActionsForControlEvents:'之后

segmentedControl.selectedSegmentIndex = 0

[segmentedControl sendActionsForControlEvents:UIControlEventValueChanged];
Run Code Online (Sandbox Code Playgroud)

  • 如果没有`sendActionsForControlEvents`,它只会更改段但不会触发事件.在Swift中,它是`segmentedControl.sendActionsForControlEvents(UIControlEvents.ValueChanged)`非常感谢. (9认同)

Lac*_*che 87

所述selectedSegmentIndex属性标识一个UISegmentedControl的所选择的段.将此属性设置为任何有效的段索引,或者将UISegmentedControlNoSegment(-1)设置为关闭当前选择.

// select the first segment
segmented.selectedSegmentIndex = 0;

// turn off the current selection
segmented.selectedSegmentIndex = UISegmentedControlNoSegment;
Run Code Online (Sandbox Code Playgroud)

  • 但是,这实际上不会触发您在用户选择其他段时设置的任何目标/操作. (34认同)

Lir*_*rik 24

@jmstone response,true,此操作不会为此控件调用valueChanged事件.

克服这个问题的一种方法是自己调用函数:

segmentedControl.selectedSegmentIndex = 3;
[self valueChangedMethod:segmentedControl];
Run Code Online (Sandbox Code Playgroud)

这会打电话:

- (void)valueChangedMethod:(UISegmentedControl *)segmentedControl
{
    //continue your code here...
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*aga 23

在Swift中:

segmentedControl.selectedSegmentIndex = 1
Run Code Online (Sandbox Code Playgroud)

斯威夫特2:

segmentedControl.sendActionsForControlEvents(UIControlEvents.ValueChanged)
Run Code Online (Sandbox Code Playgroud)

斯威夫特3:

segmentedControl.sendActions(for: UIControlEvents.valueChanged)
Run Code Online (Sandbox Code Playgroud)


nov*_*o88 6

编辑:正如 Yogesh Nikam Patil 让我注意到的那样,UIControlEvents 已从 UIControlEvents 重命名为 UIControl.Event。我已经相应地更新了我的代码。

@arcady bob 的回答对我有用。

我刚刚发布了SWIFT 5的更新版本:

yourSegmentedControl.selectedSegmentIndex = 0
yourSegmentedControl.sendActions(for: UIControl.Event.valueChanged)
Run Code Online (Sandbox Code Playgroud)

如果您只使用第一行,分段将相应地以图形方式作出反应,但不会调用与分段控件关联的 IBAction。简而言之:第二行就像点击分段控件。这就是我所需要的,也是我所缺少的。