ios 禁用TableView单元格

rfbsl7qr  于 2022-12-15  发布在  iOS
关注(0)|答案(3)|浏览(201)

如何禁用除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];
}
ctrmrzij

ctrmrzij1#

可以通过设置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;

    }

好好享受吧。:)

xzv2uavs

xzv2uavs2#

最好在tableView:cellForRowAtIndexPath:中设置禁用单元格的不透明度。正如@Parcs在their answer中正确指出的那样,您也可以在那里将禁用单元格的userInteractionEnabled设置为NO。
您可以忽略tableView:didSelectRowAtIndexPath:中不活动单元格上的点击。

iszxjhcz

iszxjhcz3#

因为另一个答案提供的代码已经过时了,只显示了它是如何在obj-c中完成的,这里有一个快速的解决方案。
要禁用单元格,需要将UITableViewCellisUserInteractionEnabled标志设置为false。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    // dequeue cell
    ...
    cell.isUserInteractionEnabled = false
    return cell
}

对于UITableViewCell的子类,您可能还希望更改现在禁用的单元格的外观。您可以通过重写属性来实现此目的,以便在设置标志时运行其他代码。

override var isUserInteractionEnabled: Bool {
    didSet {
        super.isUserInteractionEnabled = isUserInteractionEnabled
        // additional code to change text colors for example
    }
}

相关问题