【发布时间】:2011-07-13 12:37:40
【问题描述】:
如何以编程方式切换UISegmentedControl?
【问题讨论】:
标签: ios iphone uisegmentedcontrol
如何以编程方式切换UISegmentedControl?
【问题讨论】:
标签: ios iphone uisegmentedcontrol
selectedSegmentIndex 属性标识 UISegmentedControl 的选定段。将此属性设置为任何有效的段索引,或UISegmentedControlNoSegment (-1) 以关闭当前选择。
// select the first segment
segmented.selectedSegmentIndex = 0;
// turn off the current selection
segmented.selectedSegmentIndex = UISegmentedControlNoSegment;
【讨论】:
或者,在您更改 selectedSegmentIndex 之后,例如调用“sendActionsForControlEvents:”
segmentedControl.selectedSegmentIndex = 0
[segmentedControl sendActionsForControlEvents:UIControlEventValueChanged];
【讨论】:
sendActionsForControlEvents,它只会更改段,但不会触发事件。在 Swift 中是 segmentedControl.sendActionsForControlEvents(UIControlEvents.ValueChanged) 非常感谢。
在斯威夫特中:
segmentedControl.selectedSegmentIndex = 1
斯威夫特 2:
segmentedControl.sendActionsForControlEvents(UIControlEvents.ValueChanged)
斯威夫特 3:
segmentedControl.sendActions(for: UIControlEvents.valueChanged)
【讨论】:
@jmstone 响应, true,此操作不会为此控件调用 valueChanged 事件。
解决这个问题的一种方法是自己调用函数:
segmentedControl.selectedSegmentIndex = 3;
[self valueChangedMethod:segmentedControl];
这将调用:
- (void)valueChangedMethod:(UISegmentedControl *)segmentedControl
{
//continue your code here...
}
【讨论】:
编辑: Yogesh Nikam Patil 让我注意到,UIControlEvents 已从 UIControlEvents 重命名为 UIControl.Event。我已经相应地更新了我的代码。
@arcady bob 的回答是为我解决问题的答案。
我刚刚发布了 SWIFT 5 的更新版本:
yourSegmentedControl.selectedSegmentIndex = 0
yourSegmentedControl.sendActions(for: UIControl.Event.valueChanged)
如果您只使用第一行,分段控件将以图形方式做出相应反应,但不会调用与分段控件关联的 IBAction。简而言之:第二行就像点击分段控件。 这是我需要的,也是我缺少的。
【讨论】:
我遇到了类似的问题,即分段控件没有改变。 我过早地调用“selectedSegmentIndex”等。一旦我在调用“viewDidLoad”之后调用它,那么一切都很好了。
【讨论】:
首先,从您从 UI 添加的分段控件创建一个插座
@IBOutlet 弱变量 segmentedControl:UISegmentedControl! 使用下面的代码以编程方式更改选定的段
segmentedControl.selectedSegmentIndex = 1 // 索引
【讨论】: