遍历 UISegmentedControl 值

Posted

技术标签:

【中文标题】遍历 UISegmentedControl 值【英文标题】:Iterating through UISegmentedControl values 【发布时间】:2013-12-05 09:28:42 【问题描述】:

我在 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;

谁能告诉我为什么设置/获取amountSelector的值在这里不起作用(在我恢复索引后它仍然为0:

    amountSelector.selectedSegmentIndex = amountSelectorSegIndex;

【问题讨论】:

在使用setInteger:forKey: 后,您必须调用[[NSUserDefaults standardUserDefaults] synchronize]; 将数据持久化到磁盘(有关性能注意事项,请参阅synchronize 方法的文档) 【参考方案1】:

其实selectedSegmentIndexUISegmentedControl上的可写属性

当需要恢复时你想做类似的事情

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

【讨论】:

OK,据我了解,这个方法是从本地UI状态存储(NSUserDefaults)恢复?那么我如何首先将状态(seg index)存储到 NSUserDefaults 中? 为我工作!谢谢!【参考方案2】:
NSInteger i = amountSelector.selectedSegmentIndex;
[[NSUserDefaults standardUserDefaults] setInteger:i forKey:@"amountSelectorSegIndex"];

也是正确的,但是看天气 i 的值是否正确。

【讨论】:

其实我的值好像不正确。如果我把 NSLog(@"%ld", (long)amountSelector.selectedSegmentIndex);进入我的动作处理程序,结果是每次选择更改后它都是 0。 好的,如果我关注这个***.com/questions/6585896/… 就可以了!由于某种原因,如果我合成我的 amountSelector 并在我的操作处理程序中使用它来获取索引,它就不起作用。 好的!没关系!由于某种原因,与插座定义的连接已断开。再次重新连接它就可以了! @property (weak, nonatomic) IBOutlet UISegmentedControl *amountSelector;使用 ARC,Outlet 的属性应该是弱的,所以使用弱而不是强 好的,谢谢!我对强/弱条款不是很熟悉。那么在哪些情况下推荐使用强属性(使用 ARC)?

以上是关于遍历 UISegmentedControl 值的主要内容,如果未能解决你的问题,请参考以下文章

UI控件(UISegmentedControl)

UISegmentedControl 在值更改时未选择

从 UISegmentedControl 获取字符串值

UISegmentedControl 选择要发布到 web 服务的索引值

UISegmentedControl 不会取消选择旧段

UISegmentedControl 值更改时如何仅更改文本颜色?