[英]UISegmentedControl: Programmatically Set Index?
我正在尝试将用户设置加载到分段控件中。 NSUserDefault 读取正确,并且首选项正确转换为索引。 但是,分段控件似乎没有响应设置索引,宁愿停留在索引 0。
代码 clean 使用-Wall -Wextra
编译,并且clang
不报告任何问题。 我也跑过 Leaks 和 Zombies - 好的。 并且下面的ASSERTs
不会触发。
UISegmentedControl 是使用 Interface Builder 创建的(视图上共有 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 上为段创建一个操作,并在该操作中设置断点以查看段何时被更改以及谁在更改它。
您说您在界面生成器中创建了分段控件,您是否为它们创建了 IBOutlets 并连接它们?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.