Iphone UISegmentedControl setSelectedSegmentIndex:无值更改操作

Iphone UISegmentedControl setSelectedSegmentIndex:无值更改操作,iphone,uisegmentedcontrol,Iphone,Uisegmentedcontrol,我正在通过代码设置UISegmentedControl的selectedSegmentIndex。 每当我这样做时,就会调用valueChanged操作。这听起来很合乎逻辑,但是有没有一种方法可以在不调用操作的情况下设置所选的段?它应该只是更新显示 我不止一次使用过UISegmentedControl,直到现在我都没有注意到这种行为。但这一次,如果选择了特殊段,我需要显示一个警报。因此,如果视图出现并且我想显示以前选择的值,我就不能接受调用的操作 我可以断开操作,更改selectedValue并

我正在通过代码设置UISegmentedControl的selectedSegmentIndex。
每当我这样做时,就会调用valueChanged操作。这听起来很合乎逻辑,但是有没有一种方法可以在不调用操作的情况下设置所选的段?它应该只是更新显示

我不止一次使用过UISegmentedControl,直到现在我都没有注意到这种行为。但这一次,如果选择了特殊段,我需要显示一个警报。因此,如果视图出现并且我想显示以前选择的值,我就不能接受调用的操作

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

正如苹果公司所说

selectedSegmentIndex
属性通常用于确定:

用于标识选定段(即最后接触的段)的索引号

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

您还可以根据需要将其更改为不同的值

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


()

你的问题是明智的;我只能说你发现了一个bug,因为这很不寻常。通常,在代码中更改控件不会导致发出任何控件事件。设置UIDatePicker的
日期
不会发出值更改事件。设置UIPageControl的
currentPage
不会发出值更改事件。设置UISlider的
不会发出值更改事件。将UISwitch的
设置为on
不会发出值更改事件。类似地,设置UITextField的
文本
不会发出编辑更改事件。因此,更改UISegmentedControl的
selectedSegmentIndex
会发出一个值更改事件这一事实感觉是错误的。我要归档一个bug,我想你也应该

我看不到一种明显的方法来确定值更改事件是由用户点击触发的还是通过编程触发的。你得升起或降下一面国旗什么的


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

我在iOS 7.1中仍然存在此问题

我正在重新加载表并设置段索引,但它正在调用“值已更改”委托。
为了避免这种情况,我首先禁用了“段控制”委托,然后通过编程设置值,然后再次将委托重置为当前类。这不会调用“值更改”委托。

在代码中设置标志并在操作方法中检查标志之前,先设置一些标志如何?如果你没有使用控件的tag属性,你可以用它作为一个标志,而不是添加一个新的bool。最后matt的回答让我很满意。。说真的,为什么要控制?如果您也坚持这个问题,请尝试Anna指定的标志概念。。非常感谢安娜和马特…顺便说一句,苹果确认了这一众所周知的问题。Bug ID#8372405感谢您将此作为Bug提交给苹果!我也是。这个错误在iOS 5和iOS 6中已经修复。整个问题现在都成了一纸空文。