记住tableView中的选定单元格

时间:2014-08-10 15:39:56

标签: ios objective-c uitableview

我试图创建将所选单元格存储在数组中然后当你按下后退按钮并返回到此viewcontroller它应该记住所选单元格。 indexPaths在单例类中正确保存,但似乎没有触发[pickedArray containsObject:indexPath]?我做错了什么?

可能是因为NSIndexPath号码不相等?如果是的话我该如何解决这个问题?

rentType.h NSObject

@interface rentType : NSObject


@property BOOL picked;

@end

viewDidLoad中

 menuArray = [NSArray arrayWithObjects:@"Under 12 måneder", @"Over 12 måneder", @"Ubegrænset", nil];

tableView方法

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

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }
    cell.textLabel.textColor = [UIColor colorWithRed: 0.137 green: 0.145 blue: 0.157 alpha: 1];
    cell.textLabel.font = [UIFont fontWithName: @"HelveticaNeue" size: 14];



    obj = [menuArray objectAtIndex:indexPath.row];
    cell.textLabel.text = [NSString stringWithFormat:@"%@",obj];

    if (obj.picked) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }


    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (obj.picked) {
        obj.picked = NO;
    } else {
        obj.picked = YES;
    }
    [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation: UITableViewRowAnimationFade];
}

2 个答案:

答案 0 :(得分:1)

我相信在picked中存储的每个对象中都有menuArray属性是更好的方法。这样,每个对象都可以告诉你它是否被挑选而不必处理第二个阵列,这个阵列有可能与用于单元格内容的阵列不同步。

我们的想法是设置与单元格匹配的对象,使它们不是字符串,而是自定义对象。然后你可以摆脱pickedArray并写下:

   CustomObject *obj = [menuArray objectAtIndex:indexPath.row];
   cell.textLabel.text = obj.text;

    if (obj.picked) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

答案 1 :(得分:1)

您只需一行代码即可完成此操作:

 tableView.indexPathsForSelectedRows