我在单UITextField
中有多个UITableviewCell
。
我知道我们可以使用标记识别subviews
UITableViewCell
。
但在我的方案中,我在单UITextField
中有多个UITableViewCell
。
如何提供标记以识别哪个UITextField
被点击?
答案 0 :(得分:1)
如果UITextFeild's
中有多个UITableViewCell
,请为textfield
方法中的每个cellForRowAtIndex
添加标记。然后当您点按textfield
时,UITextFieldDelegate
会被点击。
例如,当您点按textFieldShouldBeginEditing
时,textfield
会被点击。
或者,您甚至可以将观察者添加到文本字段中,然后您可以简单地验证点击了哪个文本字段。
如果您考虑委托方法:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if(textfield.tag==1)
{
//you tapped textfield 1
}
}
答案 1 :(得分:0)
如果我理解正确,由于每个Cell中有多个textField,因此仅使用行作为标记仍然无法区分它与特定行的textField。
我在这些场景中通常做的是在标签中编码2个值。
例如,您可以像这样保存:
textField.tag = indexPath.row * 1000 + TEXTFIELD_INDEX
然后,在该textField的委托方法上,您将检索它:
NSInteger textFieldIndex = textField.tag % 1000;
NSInteger row = textField.tag / 1000;
textField索引将作为标记的余数1000存储,行本身将存储为数千个。
注意:执行此操作时存在隐含限制,其中每个单元格中最多只能包含1000个textFields,以及大约2000000个单元格。假设tag是32位整数。但我觉得这很合理:)
答案 2 :(得分:0)
您可以在storyboard或nib文件中设置标记。
选择文本字段,选择右侧的属性选项卡,在视图部分中修改标记。
答案 3 :(得分:0)
您可以将标签设置为
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
}
}
}