好的,我有一个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编码的吗?
答案 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];
我很惊讶它不能像你编码那样工作,但至少这是一个解决方法,直到我们弄明白。