我有一堆带有标签和文本框的自定义UITableViewCells
。我已禁用文本框但我想这样做,当用户点击编辑按钮时,它将使文本框可编辑。如何执行此操作以使UITextFields
中的所有UITableView
都启用?
我有
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
[self.navigationItem setHidesBackButton:editing animated:YES];
if (editing) {
}
}
但无法在其中添加文本框启用,因为我无法访问所有文本字段。我是否需要添加代码来获取所有单元格并循环遍历它们并启用文本字段?
答案 0 :(得分:8)
我会在isEditing
方法的BOOL
上设置UITableViewDelegate
setEditing:animated:
,并在更改值时更新可见的单元格。
NSArray *visibleCells = [myTable visibleCells];
for (MyTableViewCell *cell in visibleCells)
cell.textField.enabled = isEditing;
然后,再次使用UITableViewDelegate
,更新tableView:willDisplayCell:forRowAtIndexPath:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
cell.textField.enabled = isEditing;
}
答案 1 :(得分:2)
修改UITableViewCell
的子类,并在子类的viewDidLoad
或init
方法中注册实例以获取编辑通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(disableTextBox)name:@“EditingIsEnabled”object:nil];
并实现一个名为disableTextBox
的方法,该方法禁用该单元格的文本框。
然后在您的setEditing:animated
方法中,当您要开始编辑时发布通知:
[[NSNotificationCenter defaultCenter] postNotificationName:@“EditingIsEnabled”object:self];
覆盖dealloc
中的方法UITableViewCell
并以观察者身份移除自己,否则您将崩溃:
[[NSNotificationCenter defaultCenter] removeObserver:self];
如果您不使用ARC,请务必致电[super dealloc]
。如果您使用的是ARC,请不要拨打超级电话。
当你想要禁用所有单元格时,你可以做同样的事情,只需发布一个名为EditingIsDisabled
的不同名称的通知。
如果您需要我更多地充实代码,请告诉我。
编辑:在这种情况下,我更喜欢DBD的方法。