UITableViewCell Checkmark - 如何保存和检索indexPath?

时间:2014-12-09 21:36:33

标签: ios objective-c uitableview

previous SO question之后,我试图让我的tableView单元格选择正确,保存和其他东西。

我已切换,但无法保存indexPath并检索它以显示选择,即使用户离开视图或重新启动应用程序也是如此。

以下是代码:

@property (nonatomic, strong) NSIndexPath* lastIndexPath;

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    ...
    if([self.lastIndexPath isEqual:indexPath])
    {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
    else
    {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }
    ...
}


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    if(self.lastIndexPath)
    {
        UITableViewCell* uncheckCell = [tableView
                                        cellForRowAtIndexPath:self.lastIndexPath];
        uncheckCell.accessoryType = UITableViewCellAccessoryNone;
    }
    if([self.lastIndexPath isEqual:indexPath])
    {
        self.lastIndexPath = nil;
    }
    else
    {
        UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        self.lastIndexPath = indexPath;
    }


    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[NSNumber numberWithInt:self.lastIndexPath.row] forKey:@"selectedCell"];
    [defaults synchronize];

}

即使在用户关闭并重新打开视图后,如何保存indexPath并检索它以显示选择?

提前致谢。

2 个答案:

答案 0 :(得分:1)

您应该在viewWillAppear

中添加
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSNumber *lastRow = [defaults objectForKey:@"selectedCell"];
if (lastRow) {
    self.lastIndexPath = [NSIndexPath indexPathForRow:lastRow.integerValue inSection:0];
}

重新启动应用时,您应该从lastIndexPath获取NSUserDefaults,否则为零。

答案 1 :(得分:0)

你应该做两件事:

1)在didSelectRowAtIndexPath中,重新加载先前选定的行(如果可见) 2)在cellForRowAtIndexPath中,如果indexpath.row与您选择的单元格相同,请在那里进行检查。如果是,请给它勾选标记,如果不是,则不要