好的,所以我有一个 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/