2012-03-21 118 views
2

我有一堆带有标签和文本框的自定义UITableViewCells。我禁用了文本框,但我想这样做,当用户点击编辑按钮时,它将使文本框可编辑。我该如何做到这一点,以便UITableView中的所有UITextFields变得启用?在编辑模式下启用UITableViewCell中的所有文本框

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

    if (editing) { 

    } 
} 

,但不能添加文本框使在那里,因为我没有访问所有文本框。我是否需要添加代码来抓取所有单元格并循环遍历它们并启用文本字段?

+0

我相信你必须迭代单元格并启用所需的文本字段。 – FluffulousChimp 2012-03-21 17:52:32

回答

8

我会通过在setEditing:animated:方法的UITableViewDelegate上设置isEditingBOOL并在更改值时更新可见单元格。

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; 
} 
2

编辑您的UITableViewCell子类,注册您的情况为您的子类的viewDidLoadinit方法的编辑通知:

[[NSNotificationCenter def aultCenter] addObserver:self selector:@selector(disableTextBox)name:@“EditingIsEnabled”object:nil];

并实现了一个名为disableTextBox方法禁用该小区的文本框中。

然后在您的setEditing:animated方法,当你要开始发布通知编辑:

[NSNotificationCenter defaultCenter] postNotificationName:@ “EditingIsEnabled” 对象:自我]。

覆盖在你的UITableViewCell方法dealloc和删除自己的观察,否则你会崩溃:

[NSNotificationCenter defaultCenter] removeObserver:自我]。

如果你不使用ARC,请确保调用[super dealloc]。如果你使用ARC,不要叫超级。

如果要禁用所有单元格,只需发布​​类似EditingIsDisabled等不同名称的通知即可。

让我知道你是否需要我充实代码多一点。

编辑:在这种情况下,我更喜欢DBD的方法。

相关问题