首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >UISegmentedControl在以编程方式更改selectedSegmentIndex时调用操作方法

UISegmentedControl在以编程方式更改selectedSegmentIndex时调用操作方法
EN

Stack Overflow用户
提问于 2011-09-21 17:46:57
回答 3查看 13.3K关注 0票数 3

我的xib文件中有一个UISegmentedControl。它链接到xib文件中值更改事件的操作方法。

当我以编程方式设置selectedSegmentIndex的值时,将调用操作方法

mysegmentedcontrol.selectedSegmentIndex = index

我原以为只有当用户通过触摸控件来更改控件时,才会调用操作方法?

这种情况只发生在UISegmentedControl上。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-21 18:25:34

.h文件

BOOL isProgramaticallyChanged;

.m文件

- (IBAction)segmentAction:(id)sender { // valuechanged connected function

        UISegmentedControl *segControll = (UISegmentedControl *)sender;

    if (segControll.tag == 55) { // while create segment specify tag value to 55 (to set use via IB or Code)

        if (isProgramaticallyChanged == NO) {

            // your valuechanged code here

        }

        else {

            isProgramaticallyChanged = NO; //important

        }

    }

    else if (segControll.tag == 66) { // for many segments

    }

        //...like this do for all segments
}

在.m文件中

无论您将这段代码放在哪里进行编程更改,在此之前都要这样做

if (mysegmentedcontrol.selectedSegmentIndex != index) {

    isProgramaticallyChanged = YES;

    mysegmentedcontrol.selectedSegmentIndex = index;

}
票数 6
EN

Stack Overflow用户

发布于 2011-09-21 18:03:44

如果您还计划以编程方式更改选定的索引,则解决方案可能是将IBAction方法链接到touchUpInside事件,并在那里传播值更改。

从我们在Cocoa Fundamentals Guide中读到的信息来看,来自UI控件的事件应该仅在响应于用户对控件的操作而触发事件时发送,而不是来自编程更改。这要么是我的误解,要么是某种UISegmentedControl错误。

我的解决方案更详细

IBAction方法连接到UISegmentedControlTouch Up Inside事件,并将sender参数转发给处理Value Changed的操作方法。这样,如果对值进行了编程更改,控件将不会调用值更改处理程序。仅当它是通过控件上的直接用户操作时。

这里要解决的唯一问题是检测所选索引是否实际发生了更改。

票数 3
EN

Stack Overflow用户

发布于 2012-02-22 05:42:27

我会在答案中添加更多的东西,这些东西可能会让人感觉更容易控制。只需调用removeTarget,对选定的段进行编程更新,重新添加目标(针对UIControlEventValueChanged)

我来这里寻找答案,提供的答案似乎是有效的,但后来我意识到,做删除/添加目标感觉更合适,更有效。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7497760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档