在IBAction中调用基于所选UITableView行的内容

时间:2016-09-28 22:45:47

标签: ios objective-c uitableview

我刚刚看到一篇关于选择多个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);

}

}

2 个答案:

答案 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]中设置配件类型,否则滚动时检查标记会出错。