使用 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 小时格式显示时间选择器

sh 使用git cherry-pick从分支中选择提交

使用 Intent.ACTION_PICK 读取电话号码和地址

HDU暑假多校第八场J-Taotao Picks Apples