uisegmentedcontrol手动设置所选索引不起作用

时间:2012-04-19 15:43:41

标签: 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编码的吗?

1 个答案:

答案 0 :(得分:1)

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

-(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];

我很惊讶它不能像你编码那样工作,但至少这是一个解决方法,直到我们弄明白。