如何设置UITable指定列不可编辑且可见,其余列保持可编辑?
实现UITable指定列不可编辑的方案
针对iOS的UITableView
如果是iOS平台的UITableView,系统没有直接设置单列不可编辑的API,但可以通过代理方法精准控制:
方式1:通过tableView:canEditRowAtIndexPath:代理方法
在UITableView的代理中,根据列索引判断是否允许编辑,返回NO即可让对应列无法进入编辑状态:
Objective-C 示例:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { // 禁止第0列和第2列编辑,其余列允许 if (indexPath.column == 0 || indexPath.column == 2) { return NO; } return YES; }
Swift 示例:
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { // 仅允许第1列编辑 return indexPath.column == 1 }
方式2:自定义UITableViewCell(适用于带输入控件的场景)
如果表格单元格自带输入控件(比如UITextField),可以直接在cell配置时动态设置控件的可编辑状态:
Swift 示例:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "EditableCell", for: indexPath) as! EditableCell // 第0列不可编辑,其他列允许 cell.inputTextField.isEnabled = indexPath.column != 0 return cell }
针对macOS的NSTableView
如果是macOS平台的NSTableView(你提到的UITable可能是笔误),可以使用tableView:shouldEditTableColumn:row:代理方法:
Swift 示例:
func tableView(_ tableView: NSTableView, shouldEdit tableColumn: NSTableColumn?, row: Int) -> Bool { // 通过列的tag区分,tag为101的列禁止编辑 guard let tag = tableColumn?.tag else { return true } return tag != 101 }
内容的提问来源于stack exchange,提问作者Robosch
相关产品推荐
相关产品推荐

