Como obter um UITableViewCell de uma das suas subvisualizações
eu tenho umUITableView
com umUITextField
em cada um dosUITableViewCells
. Eu tenho um método no meu ViewController que lida com o evento "Did End On Exit" para o campo de texto de cada célula e o que eu quero ser capaz de fazer é atualizar os dados do meu modelo com o novo texto.
O que eu tenho atualmente é:
- (IBAction)itemFinishedEditing:(id)sender {
[sender resignFirstResponder];
UITextField *field = sender;
UITableViewCell *cell = (UITableViewCell *) field.superview.superview.superview;
NSIndexPath *indexPath = [_tableView indexPathForCell:cell];
_list.items[indexPath.row] = field.text;
}
Claro que fazendofield.superview.superview.superview
funciona, mas parece tão hacky. Existe uma maneira mais elegante? Se eu definir a tag doUITextField
aoindexPath.row
da célula sua em emcellForRowAtIndexPath
essa tag estará sempre correta mesmo depois de inserir e excluir linhas?
Para aqueles que prestam muita atenção, você pode pensar que eu tenho um.superview
muitos lá, e para iOS6, você estaria certo. No entanto, no iOS7, há uma visão extra (o NDA me impede de elaborar) na hierarquia entre a visualização de conteúdo da célula e a própria célula. Isso ilustra precisamente porque fazer a coisa do superview é um pouco hacky, já que depende de saber comoUITableViewCell
é implementado e pode quebrar com atualizações para o sistema operacional.