iphone - uisegmentedcontrol 手动设置 selectedindex 不工作

标签 iphone ios uisegmentedcontrol

好的,所以我有一个 segmentedControl,我需要动态地删除和添加段。这段代码将删除第一个段,但不会设置要选择的正确段。奇怪的是,当我打印出来时,所有的数字都是正确的,只是屏幕上突出显示的部分总是超出 -1。

 if ([outControl numberOfSegments]==4) {
                int previous = [outControl selectedSegmentIndex];
                if (previous>0) {
                    previous--;
                }
                [outControl removeSegmentAtIndex:0 animated:YES];

                NSLog(@"setting to %d with %d segments", previous ,[outControl numberOfSegments]);
                [outControl setSelectedSegmentIndex:previous];


            }

这里是日志设置为 1,有 3 个段。使用此日志段 0 实际上是在控件中选择的,我不能按段 1,因为控件认为它已被选中? 我可以按段 0,尽管它显示为已选中。

这是一个屏幕截图,试图澄清我的问题。

image 单元格中的文本是正确的,因为实际上选择了单元格 1,正如您在日志中看到的那样。但是突出显示的单元格是 0!?这让我疯狂。这一切都在添加段时​​有效,只有在删除段时我才遇到问题。

谁能看出哪里出了问题??

非常感谢

朱尔斯

我注意到,即使我没有设置新的选定段,我也会得到相同的结果,即选择了错误的段......??如果对任何人有帮助,这也是用 cellForRowAtIndexPath 编码的吗?

最佳答案

代码看起来正确,但行为(错误)就像您描述的那样。在运行循环的同一轮中更改选择作为段删除时,控件似乎处于尴尬状态。但这有效:

-(void)setSegmentedSelection:(NSNumber *)indexNum {
    NSInteger index = [indexNum intValue];
    [outControl setSelectedSegmentIndex:index];
}

// then instead of setting the selected index after the segment is removed,
// let the run loop return...

[self performSelector:@selector(setSegmentedSelection:) withObject:[NSNumber numberWithInt:previous] afterDelay:0.0];

令我惊讶的是它无法像您编码的那样工作,但至少在我们弄清楚之前这里有一个解决方法。

关于iphone - uisegmentedcontrol 手动设置 selectedindex 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10231758/

相关文章:

ios - 如何根据前面段中的选择启用和禁用某些 UISegmentedControl 段

iphone - 如何在 ios 8 和 ios 7 中创建自定义弹出 View ?

ios - 如何为我的应用程序创建服务条款页面

ios - NSNumber转换-对经纬度

c# - DismissViewController 有时会导致程序卡死或崩溃

iphone - 邮件应用程序中的 UISegmentedControl

ios - 有没有办法跟踪 UISegmentedControl 的索引选择?

iphone - Facebook 演示应用程序无法在 iOS 上构建

ios - MKAnnotation swift

iphone - TextField 覆盖 UIAlertView 的按钮