禁用TableView单元格

时间:2014-02-04 18:31:13

标签: ios uitableview

如何禁用除UITableView的前3个单元格之外的所有单元格?

如果选择了其中一个禁用的单元格,则返回nil:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {

if ( indexPath.row >= 3 ) {
    [[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:2 inSection:0]] setAlpha:0.5];
    return nil;
}

return indexPath; }

如何让禁用的单元格“可见”? 这是有效的,但我只是在启动时,因为滚动时每个单元格的indexPath都会发生变化(重复使用单元格):

for(int i = 3; i <= 100; i++) {
    [[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]] setAlpha:0.5];
}

2 个答案:

答案 0 :(得分:3)

您可以通过设置selectionStyle属性来禁用单元格,请参阅以下代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    UITableViewCell *cell = ...

    cell.selectionStyle = UITableViewCellSelectionStyleNone;

}

禁用单元格选择的另一种方法是禁用单元格的用户交互。请参阅以下代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    {
        UITableViewCell *cell = ...

        cell.userInteractionEnabled = NO;

    }

享受。 :)

答案 1 :(得分:3)

最好在tableView:cellForRowAtIndexPath:中设置已禁用单元格的不透明度。正如@Parcs在their answer中正确说明的那样,您也可以将已禁用的单元格的userInteractionEnabled设置为NO。

您可以忽略tableView:didSelectRowAtIndexPath:中的非活动单元格上的点按。