iphone - UISegmentedControl:以编程方式设置索引?

标签 iphone ios uisegmentedcontrol

我正在尝试将用户设置加载到分段控件中。 NSUserDefault 读取正确,首选项被正确转换为索引。然而,分段控件似乎不响应设置索引,宁愿留在索引 0。

代码清理使用 -Wall -Wextra 编译,clang 不报告任何问题。我也跑过 Leaks 和 Zombies - 好的。并且下面的 ASSERTs 不会触发。

UISegmentedControl 是使用 Interface Builder 创建的( View 上总共有 4 个)。我已经验证了连接。我试过在 -viewDidLoad-viewWillAppear-viewDidAppear 中调用 -loadPreferences

我是否缺少任何技巧?我应该调用 needsUpdate 还是其他方法来让控件重绘?

杰夫

-(void)loadPreferences
{
   NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
   ...

    int days = [userDefaults integerForKey:kDirtyAfter];
    ASSERT(IsValidDirtyDays((DirtyDays)days));
    if(!IsValidDirtyDays((DirtyDays)days))
        days = (int)DirtyDaysDefault;

    int idx;
    switch(days)
    {
        case DirtyDays1: idx = 0; break;
        case DirtyDays3: idx = 1; break;
        case DirtyDays7: idx = 2; break;
        case DirtyDays14: idx = 3; break;
        case DirtyDays28: idx = 4; break;
        default: idx = 1;
    }

    // dirtyAfterSegment.selectedSegmentIndex = idx;
    [dirtyAfterSegment setSelectedSegmentIndex:idx];
    ASSERT(dirtyAfterSegment.selectedSegmentIndex == idx);
}

最佳答案

如果 Assert 没有触发,那么一定是在这段代码之后将索引更改为 0,或者代码本身总是使用第一个 case 语句。

为该段在 valueChanged 上创建一个操作,并在该操作中设置一个断点以查看该段何时被更改以及更改者是谁。

关于iphone - UISegmentedControl:以编程方式设置索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6511363/

相关文章:

iphone - 使用 Curl 验证 App Store 收据时出现 IllegalStateException?

iphone - 关于使用 Accelerate.framework 的问题

iphone - 如何从 UITableView 中删除部分 (iPhone/iPad)

ios - 使用 CAKeyframeAnimation 的交错动画?

swift - UISegmentedControl selectedIndex 总是显示 0

ios - 如何使用段控制 ios 在两个 UIView 之间正确切换?

iphone - 如何使用 Facebook Open graph api for fitness 步行通过 FacebookSDK

ios - iOS 应用程序中删除请求后奇怪超时

ios - 保持 uiview 突出显示(更改它的 alpha)直到另一个被点击

swift - 如何以编程方式将图像放入 SegmentController - Swift