【问题标题】:uisegmented control manually setting selected index not workinguisegmentedcontrol 手动设置 selectedindex 不起作用
【发布时间】:2012-04-20 01:20:52
【问题描述】:

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

【问题讨论】:

    标签: iphone ios uisegmentedcontrol


    【解决方案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];
    

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

    【讨论】:

    • 谢谢,我将使用它,因为我看不出还有什么办法可以绕过它,奇怪的是它可以与段插入一起使用......
    • 我实际上尝试过这个,但得到的结果与我之前描述的相同。不幸的是,它没有用。
    • 那么,其他事情正在发生。我在一个测试项目中运行了您的代码,但它未能按照您的描述工作。添加执行修复它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多