将 UIPickerView 选择设置为 UITableViewCell 内的 UITextField
Posted
技术标签:
【中文标题】将 UIPickerView 选择设置为 UITableViewCell 内的 UITextField【英文标题】:Setting UIPickerView selection to UITextField inside a UITableViewCell 【发布时间】:2011-05-17 23:42:55 【问题描述】:我在自定义表格视图单元格中有一个 UITextField。在点击文本字段区域时,我会显示一个包含pickerview 的弹出框。我需要将选择器视图中的选择设置为文本字段的文本。我显示了 textDidBeginEditing 方法的弹出框。如何将选择器视图的 didSelect 方法中的选择传递给文本字段?
按照设计,整个事情都在一个 TableViewController 中,实现了 textfield 和 pickerview 委托方法。
谢谢!
【问题讨论】:
【参考方案1】:只需将 UIPickerView 的委托设置为具有您的 UITableView 的视图控制器。这样,在 UIPickerView 的 didSelect(在 tableview 的 viewcontroller 中实现)上,您只需使用 pickerview 的数据源来填充文本字段。
要从表格视图中获取自定义单元格,您只需执行以下操作:
CustomTableViewCell *thisCell = (CustomTableViewCell*)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:section]];
然后您将其中的文本字段设置为包含您想要的任何文本:
thisCell.textField.text = @"text";
【讨论】:
谢谢伙计!我想知道我是怎么错过这个东西这么久的!只需将那些包含单元格的特定 textField 的 indexPath 存储在 cellForRowAtIndexPath 方法中,并在 pickerView didSelect 方法中按照您的要求将存储的 indexPath 作为参数传递给 (CustomTableViewCell*)[self.tableView cellForRowAtIndexPath:storedIndexPath];【参考方案2】:您能提供更多信息吗? tableView:cellForRowAtIndexPath:
是什么样的?我很好奇您正在编辑的对象在哪里可用。
我能想到几种方法...
-
在文本字段上设置标签并使用它来定位正在编辑的特定文本字段
将 pickerView 的委托设置为 tableCell 并让它处理文本更改
【讨论】:
【参考方案3】:我认为最好的方法是将 UITextField 的 inputView
属性设置为 UIPickerView。此视图将显示为instead of the keyboard。
当 UITableViewCell 滚动到表格边界之外时,它可能会被释放。因此,存储对调用其 textFieldDidBeginEditing:
委托方法的 UITextField 的引用可能会导致 EXC_BAD_ACCESS
异常。
解决方案是修改单元格的model,它由视图控制器存储在一个数组中。初始化单元格时,应将文本字段的值设置为其模型对象中的相应值。最后,单元格应通过 KVO 观察其模型的变化,并相应地更新文本字段的值。
【讨论】:
以上是关于将 UIPickerView 选择设置为 UITableViewCell 内的 UITextField的主要内容,如果未能解决你的问题,请参考以下文章
如何将 UIPickerView 重置为索引:0,iPhone