来自UITableViewCellAccessoryCheckmark的动作

时间:2011-08-03 10:40:07

标签: objective-c xcode uitableview

我创建了一个包含5行的简单tableView。并在单元格上使用了UITableViewCellAccessoryCheckmark。

我想按一个按钮,根据“已检查”的细胞进行操作,哪些不是。用户可以选择none,all,1等

如何查看/哪些单元格正在使用UITableViewCellAccessoryCheckmark,哪些单元格正在使用UITableViewCellAccessoryNone?

由于

萨姆

EDIT!

我找到了一种方法来做到这一点......

在didSelectRowAtIndexPath中,我做了以下......

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Navigation logic may go here. Create and push another view controller.

    NSUserDefaults *loginDefaults = [NSUserDefaults standardUserDefaults];

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:indexPath]; 
    if (oldCell.accessoryType == UITableViewCellAccessoryCheckmark) 
    {   
        oldCell.accessoryType = UITableViewCellAccessoryNone;   

    } else {

        UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];     

        if (newCell.accessoryType == UITableViewCellAccessoryNone) 
        {   
            newCell.accessoryType = UITableViewCellAccessoryCheckmark;  
        }  
    }

    if ([oldCell.textLabel.text isEqualToString:@"All"]) {

        if (oldCell.accessoryType == UITableViewCellAccessoryCheckmark) {

            [loginDefaults setObject:@"YES" forKey:@"DownloadAll"];

        } else if (oldCell.accessoryType == UITableViewCellAccessoryNone) {

            [loginDefaults setObject:@"NO" forKey:@"DownloadAll"];
        }

    } else if

在房子周围有一点点,但由于我在桌面视图中只有5件事,所以它适用于我想要它做的事情。

现在在操作中,我检查NSUserDefaults中的值并相应地工作

1 个答案:

答案 0 :(得分:0)

有关检查哪些元素的信息属于您的模型。由于在滚动时会重复使用表格单元格,因此表格本身无法存储它,因为在任何给定时间内,内存中只有一个或两个单元格比您在屏幕上看到的单元格更多。

所以我建议你在你的模型对象中添加一个属性,并在点击一个单元格时更新它。这允许您在模型上进行任何过滤和查询,而不必尝试强制UI元素存储您的状态,而设计无法可靠地执行。

如果你尝试无论如何,你最终会遇到奇怪的情况,比如出现在你没预料到的行中的复选标记,因为将重复使用单元格实例。

另见问题Question 3240830,它非常相似。