在编辑模式下启用UITableViewCell中的所有文本字段

时间:2012-03-21 17:44:17

标签: iphone objective-c ios5 uitableview

我有一堆带有标签和文本框的自定义UITableViewCells。我已禁用文本框但我想这样做,当用户点击编辑按钮时,它将使文本框可编辑。如何执行此操作以使UITextFields中的所有UITableView都启用?

我有

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
    [super setEditing:editing animated:animated];
    [self.navigationItem setHidesBackButton:editing animated:YES];

    if (editing) {

    }
}

但无法在其中添加文本框启用,因为我无法访问所有文本字段。我是否需要添加代码来获取所有单元格并循环遍历它们并启用文本字段?

2 个答案:

答案 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的子类,并在子类的viewDidLoadinit方法中注册实例以获取编辑通知:

  
    

[[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的方法。