我刚刚看到一篇关于选择多个UITableView行的帖子,并根据选择的行/行,当你按下链接到IBAction的按钮时会发生一些事情。
这是一个有趣的问题,我已经玩过了,但现在我已经陷入了困境。
正如您所看到的,我有一个名为selectedIndexes的NSMutableArray,并且使用NSLog在控制台中显示所选的行/行。这很好用:
- (IBAction)doSomethingWithSelectedRows:(id)sender {
for (NSNumber *data in self.selectedIndexes) {
NSLog(@"Row %ld is selected.", (long)[data integerValue] +1);
}
if (WHAT SHOULD BE PUT HERE?) {
}
//Do whatever you want here.
}
问题是,如果您希望这样做,应该在上面的if语句中添加什么:
if (row 2 and row 1 are selected {
//Run this code.
}
更新:
以下是更多代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
if ([selectedCell accessoryType] == UITableViewCellAccessoryNone) {
[selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark];
[_selectedIndexes addObject:[NSNumber numberWithInteger:indexPath.row]];
} else {
[selectedCell setAccessoryType:UITableViewCellAccessoryNone];
[_selectedIndexes removeObject:[NSNumber numberWithInteger:indexPath.row]];
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
- (IBAction)doSomethingWithRowsSelected:(id)sender {
for (NSNumber *data in self.selectedIndexes) {
NSLog(@"Row %ld is selected.", (long)[data integerValue] +1);
}
}
答案 0 :(得分:0)
这是我要做的,
1,使用indexPathsForSelectedRows,
获取所选行的数组第二,迭代数组以检查indexPath.row是否为1或2.
第3,如果你的if语句的条件为真,那么就......
答案 1 :(得分:0)
虽然您可以像使用数组一样使用数组,但NSMutableIndexSet
对于此任务来说是一个更好的数据结构。它允许您检查给定索引是否在集合中而不必遍历所有对象。
@property (strong,nonatomic) NSMutableIndexSet *selectedRows;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger row = indexPath.row;
UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
if ([self.selectedRows containsIndex:row]) {
[self.selectedRows removeIndex:row];
[selectedCell setAccessoryType:UITableViewCellAccessoryNone];
} else {
[self.selectedRows addIndex:indexPath.row];
[selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark];
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
现在您可以轻松检查是否选择了任何两行:
- (IBAction)doSomethingWithRowsSelected:(id)sender {
if ([self.selectedRows containsIndex:1] && [self.selectedRows containsIndex:2]) {
// Do whatever
}
}
此外,请不要忘记根据cellForRowAtIndexPath
在[self.selectedRows containsIndex:indexPath.row]
中设置配件类型,否则滚动时检查标记会出错。