遍历 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】:
其实selectedSegmentIndex
是UISegmentedControl
上的可写属性
当需要恢复时你想做类似的事情
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 值的主要内容,如果未能解决你的问题,请参考以下文章