如何限制用户在目标c中顺序选择单元格

时间:2016-12-20 05:50:38

标签: ios objective-c uitableview

我是iOS的新手,我遇到了有关选择单元格风格的问题。用户无法直接点击第3行,他应该选择第1行,然后选择第2行和第3行。有可能??

我试试这段代码

tableView.userInteractionEnabled = NO;

但是使用这段代码我无法选择任何单元格。我有一个来自Web服务的动态数组。在此先感谢!

3 个答案:

答案 0 :(得分:1)

您应保存最后一个indexPath.row以比较当前选定的行。下面的代码强制用户按顺序选择行:用户必须选择第0行 - >第1行 - >第2行。

NSIndexPath *_lastIndexPath = [NSIndexPath indexPathForRow:0 inSection:0];
NSMutableArray *_selectedIndexPaths = [[NSMutableArray alloc] init];

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([_selectedIndexPaths containsObject:indexPath]) {
        // Set the color for selected cell
    }
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (_lastIndexPath.row + 1 >= indexPath.row) {
        // Implement what you want
    } else {
        // You should show the introduction of order operation for user
        _lastIndexPath = indexPath;
    }
    if (![_selectedIndexPaths containsObject:indexPath]) { // Check if array does not contain selecting cell, add this cell to array
        [_selectedIndexPaths addObject:indexPath];
        [tableView reloadData];
    }
}

答案 1 :(得分:1)

选择NSMutableArray

NSMutableArray *arr_selected_indexs = [NSMutableArray alloc]init];

进入tableview' cellforRowAtIndexpath方法

检查

if indexPath == 0
{
cell.userInteractionenabled = YES;
cell.contentView.backgroundColor = [UIColor greenColor];
 }else if [arr containsObject : indexPath.row]
{

cell.userInteractionenabled = YES;
cell.contentView.backgroundColor = [UIColor greenColor];
}else
{
 cell.userInteractionenabled = NO;
cell.contentView.backgroundColor = [UIColor redColor];
}

现在进入didSelectRowAtIndexPath方法

[arr addObject: indexPath.row +1 ];
[self.tableView reloaddata];

答案 2 :(得分:0)

使用

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath; 

对于特定的选择行,只需通过

忽略行选择
return NO;