为什么启用UITableView.allowsMultipleSelection时不显示复选标记?

时间:2012-03-21 19:04:13

标签: objective-c uitableview

我在iOS5.1应用程序中有一个UITableView,我设置了

self.tableView.allowsMultipleSelection=YES;

Apple文档说明“当此属性的值为YES时,会在每个被点击的行旁边放置一个复选标记。再次点击该行会删除复选标记。”。

我可以选择多行,因为背景设置为蓝色。但是,不显示任何复选标记。复选标记是否需要在didSelectRowAtIndexPath中如下所示进行设置,因为我使用的是自定义UITableViewCells?

cell.accessoryType = UITableViewCellAccessoryCheckmark;

2 个答案:

答案 0 :(得分:5)

我在uitableviewcell子类中手动执行复选标记。您将不得不在didSelectRowAtIndexPath中手动执行UITableViewCellAccessoryCheckmark并跟踪选择哪一个。我会推荐这样的东西:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell* cell = [tableview cellAtIndex:indexPath];
    if(cell.accessoryType == UITableViewCellAccessoryCheckmark)
       cell.accessoryType = UITableViewCellAccessoryCheckmark;
    else
     cell.accessoryType = UITableViewCellAccessoryNone;
}

注意:我没有测试过这个,但应该给你一个基本的想法。如果您有任何疑问,请告诉我。您是否尝试使用默认的uitableviewcell并查看它是否带有复选标记?我不认为子类会有问题,只要你不在子类中进行修改。

答案 1 :(得分:1)

另一个选择是使用tableView:didDeselectRowAtIndexPath:除了tableView:didSelectRowAtIndexPath:

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

{

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

cell.accessoryType = UITableViewCellAccessoryCheckmark;

}

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

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

cell.accessoryType = UITableViewCellAccessoryNone;

}