迭代UISegmentedControl值

时间:2013-12-05 09:28:42

标签: ios objective-c uisegmentedcontrol

我在IB中创建了一个UISegmentedControl并为其添加了四个段。我现在要做的是从我的数据模型中存储的值恢复控件的选择。

是否可以遍历UISegmentedControl的段并设置特定索引的selectedSegmentIndex?

我对UISegmentControl的动作处理程序如下所示:

-(IBAction)onAmountSelectorChange:(id)sender
{
    NSString *s = [amountSelector titleForSegmentAtIndex:[amountSelector selectedSegmentIndex]];
    int v = s.intValue;
    _nameGenParams.amount = v;
}

...现在我需要撤消操作,以便从_nameGenParams.amount恢复正确的索引。

更新:尝试使用以下方法将索引存储到NSUserDefaults:

    NSInteger i = amountSelector.selectedSegmentIndex;
[[NSUserDefaults standardUserDefaults] setInteger:i forKey:@"amountSelectorSegIndex"];

但这似乎不起作用。我在我的动作处理程序中执行此操作,并使用以下命令在viewDidLoad中恢复它:

NSUInteger amountSelectorSegIndex = [[NSUserDefaults standardUserDefaults] integerForKey:@"amountSelectorSegIndex"];
amountSelector.selectedSegmentIndex = amountSelectorSegIndex;

UISegmentedControl没有设置为我存储的索引我做错了什么?

更新2:我在我的界面中将UISegmentControl定义为IBOutlet:

@property (strong, nonatomic) IBOutlet UISegmentedControl *amountSelector;

在我的控制器类中,我合成它:

@synthesize amountSelector;

任何人都可以告诉我为什么设置/获取valueSelector的值在这里不起作用(在我使用以下命令恢复索引后它仍然为0

    amountSelector.selectedSegmentIndex = amountSelectorSegIndex;

2 个答案:

答案 0 :(得分:0)

实际上selectedSegmentIndexUISegmentedControl

上的可写属性

当需要恢复时,你想做类似

的事情
NSUInteger preservedSegmentedIndex = [[NSUserDefaults  standardUserDefaults] integerForKey:@"preservedSegmentedIndex"];
segmentedControl.selectedSegmentIndex = preservedSegmentedIndex;

答案 1 :(得分:0)

NSInteger i = amountSelector.selectedSegmentIndex;
[[NSUserDefaults standardUserDefaults] setInteger:i forKey:@"amountSelectorSegIndex"];

也是正确的,但是看天气我是否有正确的价值。