如何防止UITableViewCell被选中?

时间:2013-07-16 02:28:16

标签: ios uitableview

我从静态Selection = None的故事板场景中选择了UITableViewCell。我还添加了这个方法:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    switch (indexPath.row) {
        case 1:
            return nil;
            break;
    }
}

这并没有特别好,因为它警告一个方法没有返回值。

细胞仍可选择,一次,短暂,然后不再。单元格设置如下:

case 1:
    cell.textLabel.text = @"Search";
    break;

didSelectRowAtIndexPath一样:

case 1:
    NSLog(@"Unselectable Cell");
    break;

我错过了什么吗?

4 个答案:

答案 0 :(得分:4)

cell.userInteractionEnabled = NO;

答案 1 :(得分:2)

选择是突出显示后的状态,如果您按下一个单元格并且它变为蓝色,它会突出显示,当您释放它时,它已被选中。

因此,如果您无法突出显示该单元格,则无法选择该单元格。考虑到这一点,你可以这样做:

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    // I'm assuming you just want it for the row 1, right?
    if (indexPath.row == 1)
    {
        // You ain't getting selected today, son.
        return NO;
    }

    return YES;
}

答案 2 :(得分:1)

我做的是做同样的事情:

- (UITableViewCell *)tableView:(UITableView *)tmpTableView cellForRowAtIndexPath:   (NSIndexPath *)indexPath
{
tmpTableView.scrollEnabled = NO;
static NSString *CellIdentifier = @"MainCell";
UITableViewCell *cell = [tmpTableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (nil == cell)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    if(indexPath.row == 0)
    {
        cell.textLabel.textAlignment = NSTextAlignmentCenter;
        cell.userInteractionEnabled = NO;
        cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
        cell.textLabel.numberOfLines = 4;
        cell.textLabel.textColor = [UIColor grayColor];
        cell.textLabel.font = [UIFont systemFontOfSize:16.0];
        cell.textLabel.text = [self.answerArray objectAtIndex:indexPath.row];
        [cell.textLabel setAdjustsFontSizeToFitWidth:YES];
        return cell;
    }
}
cell.textLabel.font = [UIFont systemFontOfSize:18.0];
cell.textLabel.text = [self.answerArray objectAtIndex:indexPath.row];

return cell;
}

你可以逐行进行,当然这只适用于不会动态改变单元格数量的表格。

答案 3 :(得分:1)

你也可以尝试这个

tableView.allowsSelection = NO;

另一种方法

cell.selectionStyle = UITableViewCellSelectionStyleNone;
再来一次

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