我有一个基于纸张的表单,其中包含许多不同的部分,每个部分都有许多不同的问题。我将其显示为UITableView。每个问题都显示为带有问题本身的UITableViewCell,以及用于答案的UITextField。 UITableView目前由两个对象类型(Section和Question)支持 - 每个Section对象包含一个Questions数组。
我想知道如何轻松地将UITableView中发生的任何编辑与对象连接起来。例如,如果用户输入问题1的答案,那么我希望能够将该答案文本分配给相应的Question对象。
我目前正在做的是给每个UITextField一个唯一的标记,然后在字典中以标记值作为键存储指向每个Question对象的指针。然后,当相应的UITextField委托方法触发时,我通过UITextField标记查找字典中的对象。
这对我来说似乎很难看,而且我不太确定如果UITableViewCell脱离屏幕并在表格的其他地方重复使用会发生什么。有没有更好的方法让我失踪?
答案 0 :(得分:2)
除非我误解了这个问题,否则为什么不使用UITextFieldDelegate协议告诉对象文本字段已经完成编辑。
您只需执行以下操作: 使您的问题成为UITextFieldDelegate。然后在Question实现类
中定义textFieldDidEndEditing- (void)textFieldDidEndEditing:(UITextField *)textField {
mAnswer = textField.text;
}
那应该做对吗?文本字段完成后,Question对象将获得答案。
答案 1 :(得分:1)
你可以找出单元格的索引路径,并且你应该能够从数据模型中获取相应的对象。
UITextField *someTextField;
UIView *contentView = [someTextField superView];
UITableViewCell *cell = (UITableViewCell *)[contentView superView];
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
答案 2 :(得分:0)
与罗德里克所说的相似,我很想接受:
将对象传递到tableviewcell(将tableviewcell设置为textfield委托)并将直接输入的值分配给
中的对象- (void)textFieldDidEndEditing:(UITextField *)textField
或者为每个单元格提供与对象相关的唯一标识符,并使用相同的方法
- (void)textFieldDidEndEditing:(UITextField *)textField
让它使用输入的值和唯一标识符触发通知。然后,您可以捕获并提取要分配给对象的值。