将UITableView单元格连接回数据源

时间:2011-05-06 06:45:53

标签: iphone objective-c uitableview

我有一个基于纸张的表单,其中包含许多不同的部分,每个部分都有许多不同的问题。我将其显示为UITableView。每个问题都显示为带有问题本身的UITableViewCell,以及用于答案的UITextField。 UITableView目前由两个对象类型(Section和Question)支持 - 每个Section对象包含一个Questions数组。

我想知道如何轻松地将UITableView中发生的任何编辑与对象连接起来。例如,如果用户输入问题1的答案,那么我希望能够将该答案文本分配给相应的Question对象。

我目前正在做的是给每个UITextField一个唯一的标记,然后在字典中以标记值作为键存储指向每个Question对象的指针。然后,当相应的UITextField委托方法触发时,我通过UITextField标记查找字典中的对象。

这对我来说似乎很难看,而且我不太确定如果UITableViewCell脱离屏幕并在表格的其他地方重复使用会发生什么。有没有更好的方法让我失踪?

3 个答案:

答案 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

让它使用输入的值和唯一标识符触发通知。然后,您可以捕获并提取要分配给对象的值。