如何以编程方式切换UIsegmentedControl?

时间:2011-03-11 13:54:42

标签: ios iphone uisegmentedcontrol

如何以编程方式切换UISegmentedControll

7 个答案:

答案 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”之后调用它,那么一切都很好了。