使用 AKPickerView 保存选择
Posted
技术标签:
【中文标题】使用 AKPickerView 保存选择【英文标题】:Saving selection using AKPickerView 【发布时间】:2015-01-04 23:25:24 【问题描述】:项目描述
我有一个左边的抽屉,里面有一个有很多选项的桌子选择。其中之一是设置选项。
设置选项内部是一个表格视图。我在其中一个单元格中嵌入了AKPickerView。 AKPickerView 让我可以选择用户想要在整个应用中使用的动画。
一切正常显示,但是,在选择动画时,并重新打开设置视图时,选择器将重置自身。
下面是它的设置方式。
cellForRowAtIndexPath:
//Animation Picker
self.pickerView = [[AKPickerView alloc] initWithFrame:cell.bounds];
self.pickerView.delegate = self;
self.pickerView.dataSource = self;
self.pickerView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[cell addSubview:self.pickerView];
self.pickerView.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:20];
self.pickerView.highlightedFont = [UIFont fontWithName:@"HelveticaNeue" size:20];
self.pickerView.interitemSpacing = 25.0;
self.pickerView.fisheyeFactor = 0.0002;
self.pickerView.pickerViewStyle = AKPickerViewStyle3D;
zoom = @"Zoom Out";
drop = @"Drop In";
push = @"Push";
self.titles = @[zoom, drop, push];
[self.pickerView reloadData];
计数、标题和 didSelect:
- (NSUInteger)numberOfItemsInPickerView:(AKPickerView *)pickerView
return [self.titles count];
- (NSString *)pickerView:(AKPickerView *)pickerView titleForItem:(NSInteger)item
return self.titles[item];
- (void)pickerView:(AKPickerView *)pickerView didSelectItem:(NSInteger)item
if ([self.titles[item] isEqual:zoom])
[[NSUserDefaults standardUserDefaults] setObject:@"Zoom Out" forKey:@"Zoom"];
[[NSUserDefaults standardUserDefaults] synchronize];
else if ([self.titles[item] isEqual:drop])
[[NSUserDefaults standardUserDefaults] setObject:@"Drop In" forKey:@"Drop"];
[[NSUserDefaults standardUserDefaults] synchronize];
else if ([self.titles[item] isEqual:push])
[[NSUserDefaults standardUserDefaults] setObject:@"Push" forKey:@"Push"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"%@", self.titles[item]);
如何让选择器保存滚动位置或保存所选项目,以便在我重新打开视图时它保持原样?
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:如果您希望数据在使用应用程序时保持静止,并且在关闭它时也没关系,您应该使用持久性 (ios: Saving a double picker's settings (data persistence))。但是,如果您希望它保留(数据),无论您应该使用什么核心数据。
【讨论】:
【参考方案2】:感谢开发人员,我设法使用下面的代码完成了这项工作:
我要做的就是把它移到 viewDidLoad:
//Picker Titles
zoom = @"Zoom Out";
drop = @"Drop In";
push = @"Push";
self.titles = @[zoom, drop, push];
cellForRowAtIndexPath:
[self.pickerView selectItem:[[NSUserDefaults standardUserDefaults] integerForKey:kAnimationTypeKey] animated:false];
和 (AKPickerView *)pickerView didSelectItem:
[[NSUserDefaults standardUserDefaults] setInteger:item forKey:kAnimationTypeKey];
这让我重新加载视图并保留所选项目...到目前为止 :)
现在我只需要弄清楚如何正确保存每个键的用户默认值。
【讨论】:
以上是关于使用 AKPickerView 保存选择的主要内容,如果未能解决你的问题,请参考以下文章
带有 reloadData 的 AKPickerView 会导致奇怪的行为
使用 ng-pick-date-time 以 12 小时格式显示时间选择器