UITableViewCellAccessoryCheckmark保留在tableView上

时间:2014-04-13 15:32:44

标签: ios objective-c uitableview

我知道在选择行时,您可以使用以下代码显示复选标记:

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.accessoryType = UITableViewCellAccessoryCheckmark;

如果用户在不同的视图控制器之间移动,如何使复选标记保留在选定的行上?

由于

1 个答案:

答案 0 :(得分:0)

UITableViewControllerclearsSelectionOnViewWillAppearNO

如果您希望在取消分配表视图控制器后保留选择,则需要将所选项存储在NSUserDefaults之内。

-(void)viewDidLoad
{    
    [super viewDidLoad]; 
    NSArray *previousSelection = [[NSUserDefaults standardDefaults] objectForKey:@"selection"];
    for (NSArray *selection in previousSelection) {
         [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:selection[1] inSection:selection[0]] animated:NO scrollPosition:UITableViewScrollPositionNone];
    }
}

-(void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    NSArray *selections = [self.tableView indexPathsForSelectedRows];
    NSMutableArray *selectionsToSave = [NSMutableArray array];
    for (NSIndexPath *selection in selections) {
        [selectionsToSave addObject:@[selection.section, selection.row]];
    }
    [[NSUserDefaults standardDefaults] setObject:selectionsToSave forKey:@"selection"];
    // Save as iOS 7 now saves less frequently - see note
    [[NSUserDefaults standardDefaults] synchronize];
}

关于使用synchronize

的说明

编辑: 更正了答案,感谢@rmaddy指出您只能在NSUserDefaults中添加简单类型。