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

时间:2011-06-28 18:31:50

标签: iphone ios uisegmentedcontrol

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

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

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

我有什么诡计吗?我应该调用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);
}

2 个答案:

答案 0 :(得分:1)

如果Assert没有触发,那么在此代码之后必须将索引更改为0,或者代码本身始终使用第一个case语句。

为段创建对valueChanged的操作,并在该操作中设置断点,以查看更改段的时间以及更改段的人员。

答案 1 :(得分:0)

你说你在界面构建器中创建了分段控件,你是否为它们创建了IBOutlets并连接它们?