1

好的,所以我有一个分段控件,我需要动态删除和添加分段。这段代码将删除第一段,但没有设置要选择的正确段。奇怪的是,当我打印出来时,所有的数字都是正确的,它只是屏幕上突出显示的部分,它总是输出 -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 段,即使那是显示为选中的段。

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

图片 单元格中的文本是正确的,因为您可以从日志中看到实际选择了单元格 1。但是突出显示的单元格是0!?这让我疯狂。仅在删除我遇到问题时才添加分段时,这一切都有效。

任何人都可以看到哪里出错了吗?

非常感谢

朱尔斯

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

4

1 回答 1

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

我很惊讶它不能像你编码的那样工作,但至少在我们弄清楚之前,这是一个解决方法。

于 2012-04-19T16:37:41.207 回答