如何在iOS中的tableview中只选择两行?

时间:2014-11-16 20:06:56

标签: ios objective-c uitableview selection nsindexpath

我试图在表格视图中一次只选择两行,但似乎我无法获得好结果!

这个想法是你选择一行,这会将一个对象发送到核心数据,然后当你选择第二行向核心数据发送不同的东西时。但是,如果选择两行以上,则会显示一个警告视图,表明您只能选择两行。

我试过这个:

    NSArray *indexPathArray = [[NSArray alloc]init];
indexPathArray = [self.mainTableView indexPathsForSelectedRows];

if ( indexPathArray.count == 1) {
    NSLog(@"%@",@"we have 1 cell selected");
}
if ( indexPathArray.count == 2) {
    NSLog(@"%@",@"We have 2 cells selected!");
}
if (indexPathArray.count > 2) {
    NSLog(@"%@",@"ERROR ERROR!!!");
}

我尝试了很多其他google和堆栈溢出建议,但没有结束!

那我怎么能实现这个目标呢?

这是我有代码的方法:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath(NSIndexPath*)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];

[self setSelection:indexPath];
_profile = [self.fetchedResultsController objectAtIndexPath:indexPath];

NSInteger rowNumber = 0;
for (NSInteger i = 0; i < indexPath.section; i++) {
    rowNumber += [self tableView:tableView numberOfRowsInSection:i];
}
rowNumber += indexPath.row;
NSLog(@"%ld",(long)rowNumber);

NSArray *indexPathArray = [[NSArray alloc]init];
indexPathArray = [self.mainTableView indexPathsForSelectedRows];

if ( indexPathArray.count == 1) {
    NSLog(@"%@",@"we have 1 cell selected");
}
if ( indexPathArray.count == 2) {
    NSLog(@"%@",@"We have 2 cells selected!");
}
if (indexPathArray.count > 2) {
    NSLog(@"%@",@"ERROR ERROR!!!");
}
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];      }

2 个答案:

答案 0 :(得分:1)

删除此行:

[tableView deselectRowAtIndexPath:indexPath animated:YES];

来自didSelectRowAtIndexPath:方法。

答案 1 :(得分:0)

在方法
中注释/删除代码中的以下行 - (void)tableView:(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath

[tableView deselectRowAtIndexPath:indexPath animated:YES];  
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

并检查。你的逻辑部分应该可以正常工作。

说明:TableView方法 indexPathsForSelectedRows 将返回所选行数。您正在使用以下代码行取消选择所选行:

[tableView deselectRowAtIndexPath:indexPath animated:YES];

仅注释/删除这一行代码将使indexPathArray计数为1,因为您仍然使用以下方法重新加载方法末尾的行:

[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

上面的代码也会在重新加载时重置要取消选择的行。所以你需要评论或删除它。