如何以编程方式切换UIsegmentedControll?


Answers:


95

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

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

// turn off the current selection
segmented.selectedSegmentIndex = UISegmentedControlNoSegment;

36
但是,当用户选择其他细分时,这实际上不会触发您为之设置的任何目标/操作。
jmstone617

@ jmstone617我不希望那样,就像使用UISwitch一样-至少以我的经验而言,例如,如果用户手动更改其状态,则从User Defaults设置其值不会自动调用将调用的任何函数。
Daniel Springer

94

另外,例如,在更改selectedSegmentIndex之后,请调用“ sendActionsForControlEvents:”

segmentedControl.selectedSegmentIndex = 0

[segmentedControl sendActionsForControlEvents:UIControlEventValueChanged];

12
没有sendActionsForControlEvents,它将仅更改段,但不会触发事件。在Swift中,非常segmentedControl.sendActionsForControlEvents(UIControlEvents.ValueChanged) 感谢。
斯蒂芬,

工作正常,但旧索引颜色不变
Anil

25

@jmstone响应,是的,此操作不会为此控件调用valueChanged事件。

解决此问题的一种方法是自己调用该函数:

segmentedControl.selectedSegmentIndex = 3;
[self valueChangedMethod:segmentedControl];

这将称为:

- (void)valueChangedMethod:(UISegmentedControl *)segmentedControl
{
    //continue your code here...
}

25

在Swift中:

segmentedControl.selectedSegmentIndex = 1

斯威夫特2:

segmentedControl.sendActionsForControlEvents(UIControlEvents.ValueChanged)

斯威夫特3:

segmentedControl.sendActions(for: UIControlEvents.valueChanged)

4

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

@arcady bob的答案是对我有用的一个。

我只是发布SWIFT 5的更新版本:

yourSegmentedControl.selectedSegmentIndex = 0
yourSegmentedControl.sendActions(for: UIControl.Event.valueChanged)

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


1
“ UIControlEvents”已重命名为“ UIControl.Event”
Yogesh Nikam Patil'4

2

我有一个类似的问题,即分段控件没有变化。我太早调用了“ selectedSegmentIndex”,等等。一旦我在调用“ viewDidLoad”之后调用它,一切就再好了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.