如何以编程方式切换UISegmentedControll
?
答案 0 :(得分:85)
selectedSegmentIndex属性标识UISegmentedControl的选定段。将此属性设置为任何有效的段索引,或UISegmentedControlNoSegment( - 1)以关闭当前选择。
// select the first segment
segmented.selectedSegmentIndex = 0;
// turn off the current selection
segmented.selectedSegmentIndex = UISegmentedControlNoSegment;
答案 1 :(得分:82)
或者,在您更改selectedSegmentIndex调用'sendActionsForControlEvents:'后,例如
segmentedControl.selectedSegmentIndex = 0
[segmentedControl sendActionsForControlEvents:UIControlEventValueChanged];
答案 2 :(得分:24)
@jmstone回复, 如果为true,则此操作不会为此控件调用valueChanged事件。
克服这个问题的一种方法是自己调用函数:
segmentedControl.selectedSegmentIndex = 3;
[self valueChangedMethod:segmentedControl];
这将致电:
- (void)valueChangedMethod:(UISegmentedControl *)segmentedControl
{
//continue your code here...
}
答案 3 :(得分:21)
在斯威夫特:
CREATE TEMPORARY TABLE IF NOT EXISTS DupeColumn AS (
SELECT column_name
FROM table_name
GROUP BY column_name
HAVING COUNT(*) > 1
);
SELECT t.*
FROM DupeColumn dc
INNER JOIN table_name t
ON dc.column_name = t.column_name;
DROP TEMPORARY TABLE DupeColumn;
斯威夫特2:
segmentedControl.selectedSegmentIndex = 1
斯威夫特3:
segmentedControl.sendActionsForControlEvents(UIControlEvents.ValueChanged)
答案 4 :(得分:4)
编辑:正如Yogesh Nikam Patil引起我注意的那样,UIControlEvents已从UIControlEvents重命名为UIControl.Event。我已经相应地更新了代码。
@arcady bob答案是对我有用的方法。
我刚刚发布了 SWIFT 5 的更新版本:
yourSegmentedControl.selectedSegmentIndex = 0
yourSegmentedControl.sendActions(for: UIControl.Event.valueChanged)
如果仅使用第一行,则分段将以图形方式做出相应的反应,但不会调用与分段控件关联的IBAction。简而言之:第二行就像点击分段控件。 这就是我所需要的,我所缺少的。
答案 5 :(得分:3)
首先,从您从 UI 添加的分段控件创建一个插座
@IBOutlet 弱变量 segmentedControl:UISegmentedControl! 使用下面的代码以编程方式更改所选段
segmentedControl.selectedSegmentIndex = 1 // 索引
答案 6 :(得分:2)
我遇到了一个类似的问题,即分段控制没有改变。 我过早地称之为“selectedSegmentIndex”等。一旦我在调用“viewDidLoad”之后调用它,那么一切都很好了。