在单个 UITableViewCell 中管理多个 UITextField
Posted
技术标签:
【中文标题】在单个 UITableViewCell 中管理多个 UITextField【英文标题】:Managing multiple UITextField in a single UITableViewCell 【发布时间】:2015-12-22 12:37:36 【问题描述】:我在单个UITableviewCell
中有多个UITextField
。
我知道我们可以使用标签识别UITableViewCell
中的subviews
。
但在我的场景中,我在单个 UITableViewCell
中有多个 UITextField
。
如何提供标签来识别点击了哪个UITextField
?
【问题讨论】:
每个 UITextfields 的标签,然后您可以比较 row=1、tag=1 等。 @AnoopVaidya:感谢您的回复,但我在单个 UITableViewCell 中有多个文本字段。 是的,为什么你不能为它们每个都设置标签/标识符? @AnoopVaidya:能否详细说明一下? 您可以使用自定义协议和委托方法 【参考方案1】:当您的UITableViewCell
中有多个UITextFeild's
时,请在您的cellForRowAtIndex
方法中为每个textfield
提供标记。然后当你点击textfield
时,UITextFieldDelegate
就会被击中。
例如,当您点击textfield
时,textFieldShouldBeginEditing
会被击中。
或者,您甚至可以将观察者添加到您的文本字段,然后您可以简单地验证点击了哪个文本字段。
如果考虑委托方法:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
if(textfield.tag==1)
//you tapped textfield 1
【讨论】:
【参考方案2】:如果我理解正确,由于每个单元格中有多个 textField,因此仅使用该行作为标记仍然无法区分它与该特定行是哪个 textField。
在这些场景中,我通常会在标签中编码 2 个值。
例如你可以这样保存:
textField.tag = indexPath.row * 1000 + TEXTFIELD_INDEX
然后,在该 textField 的委托方法上,您可以像这样检索它:
NSInteger textFieldIndex = textField.tag % 1000;
NSInteger row = textField.tag / 1000;
textField 索引将存储为标记上 1000 的余数,而行本身将存储为千位。
注意:这样做有一个隐含的限制,即每个单元格中最多只能有 1000 个文本字段,大约 2000000 个单元格。假设标签是一个 32 位整数。但我觉得这很合理:)
【讨论】:
【参考方案3】:您可以在故事板或 nib 文件中设置标签。
选择文本字段,选择右侧的属性选项卡,在视图部分修改标签。
【讨论】:
【参考方案4】:你可以设置一个标签像
cell.contentView.subviews.enumerated().forEach (offset, view) in
(view as! UITextField).tag = 100 + offset
然后在
extension ViewController:UITextFieldDelegate
func textFieldDidBeginEditing(_ textField: UITextField)
if textField.tag == 101
// first textField
else if textField.tag == 102
// second textField
else
// else
【讨论】:
以上是关于在单个 UITableViewCell 中管理多个 UITextField的主要内容,如果未能解决你的问题,请参考以下文章
从 NSIndexPath 获取 UITableViewCell?
UITableViewCell 中单个 UIImageView 应该都有哪些约束?
在单个 NSOperationQueue iOS 中管理多个操作,例如暂停/恢复单个操作