UISegmentedControl setSelectedSegmentIndex:无值更改操作

问题描述 投票:10回答:3

我正在通过代码设置UISegmentedControl的selectedSegmentIndex。每当我这样做时,都会调用valueChanged动作。这对我来说听起来合乎逻辑,但是有没有办法在不调用操作的情况下设置选定的细分?它应该只是更新显示。

我已经多次使用UISegmentedControl,直到现在我都没有注意到这种行为。但是这一次,如果选择了特殊细分,我需要提出警报。因此,如果视图出现并且我想显示先前选择的值,那么我将无法使用被调用的动作。

我可以断开该动作,更改selectedValue并重新连接该动作。但是也许有更好的方法。

iphone uisegmentedcontrol
3个回答
11
投票

您的问题是一个明智的问题;我只能建议您已找到一个错误,因为这很罕见。通常,更改代码中的控件不会导致发出任何控件事件。设置UIDatePicker的date不会发出Value Changed事件。设置UIPageControl的currentPage不会发出Value Changed事件。设置UISlider的value不会发出Value Changed事件。设置UISwitch的on不会发出Value Changed事件。同样,设置UITextField的text不会发出Editing Changed事件。因此,更改UISegmentedControl的selectedSegmentIndex会发出Value Changed事件的事实让人感到不对。我要提交一个错误,我认为您也应该这样做。

我没有一种明显的方法来确定Value Changed事件是由用户点击还是以编程方式触发的。您必须升高和降低BOOL标志或其他东西。

编辑:在iOS 5中已修复。


0
投票

我在iOS 7.1中仍然有此问题。

我正在重新加载表并设置段索引,但它正在调用“值更改”委托。为了避免这种情况,我先取消了“细分控件”的委托,然后以编程方式设置了值,然后再次将该委托重置为当前类。这不会称为“价值变更”委托。


0
投票

根据Apple

selectedSegmentIndex属性通常用于确定:

用于标识所选段(即最后触摸的段)的索引号。

默认值为UISegmentedControlNoSegment(未选择任何段),直到用户触摸一个段。将此属性设置为-1可关闭当前选择。

您也可以根据需要将其更改为其他值。

UISegmentedControl在控件处于瞬时模式时将忽略此属性。当用户触摸某个段以更改选择时,将生成控制事件UIControlEventValueChanged;否则,将生成事件。如果将分段控件设置为响应此控件事件,它将向其目标发送操作消息。

ref

© www.soinside.com 2019 - 2024. All rights reserved.