UISegmentedControl setSelectedSegmentIndex:不带valueChanged Action

时间:2010-12-31 15:42:10

标签: iphone uisegmentedcontrol

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

我不止一次使用过UISegmentedControl,直到现在我甚至没有注意到这种行为。但是这次我需要在选择特殊段时发出警报。因此,如果视图出现并且我想显示之前选择的值,则无法使用调用的操作。

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

3 个答案:

答案 0 :(得分:11)

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

我没有看到明确的方法来确定Value Changed事件是由用户点击还是以编程方式触发。你必须提高和降低BOOL旗帜等等。

编辑:这已在iOS 5中修复。

答案 1 :(得分:0)

根据Apple

selectedSegmentIndex属性通常用于确定用于标识所选分段的索引号(即最后一个分段)。

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

您也可以根据您的要求将其更改为不同的值。

当控件处于瞬时模式时,

UISegmentedControl忽略此属性。当用户触摸片段以改变选择时,生成控制事件UIControlEventValueChanged;如果分段控件设置为响应此控制事件,则会向其目标发送操作消息。

答案 2 :(得分:0)

我仍然在iOS 7.1中遇到此问题。

我正在重新加载表并设置段索引,但它正在调用'value changed'委托。 为了避免这种情况,我首先填充'segment control''委托,然后以编程方式设置值,并再次将委托重置为当前类。这不会称为“价值变化”代表。