UITableViewCell 与 TextField 并检查输入
Posted
技术标签:
【中文标题】UITableViewCell 与 TextField 并检查输入【英文标题】:UITableViewCell with TextField and checks input 【发布时间】:2011-10-07 20:29:04 【问题描述】:我目前正在创建一个带有 UITextField 的 UITableViewCell。 单击文本字段时,我想调出我创建的数字键盘。当我输入时,文本字段应该为我检查输入;单击其他位置时,应关闭键盘。
代码:
UITableViewCell *sizeCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"sizeCell"];
sizeCell.textLabel.text = @"Size";
UITextField* sizeField = [[UITextField alloc] initWithFrame:CGRectMake(185, 10, 100, 28)];
sizeField.text = @"0";
sizeField.textAlignment = UITextAlignmentRight;
sizeField.textColor = [UIColor colorWithRed:50.0/255.0 green:79.0/255.0 blue:133.0/255.0 alpha:1.0f];
sizeField.backgroundColor = [UIColor clearColor];
sizeField.keyboardType = UIKeyboardTypeDecimalPad;
[sizeCell.contentView addSubview:sizeField];
rows = [[NSArray arrayWithObjects:switchCell, typeCell, sizeCell, nil] retain];
我尝试像这样实现 UITextFieldDelegate:
-(BOOL)textFieldShouldReturn:(UITextField *)textField
[sizeField resignFirstResponder];
return YES;
但键盘并没有消失...
如何验证输入并关闭键盘?
【问题讨论】:
【参考方案1】:您永远不会在您的文本字段上设置委托,以便调用 textFieldShouldReturn:
。确保您的班级符合UITextFieldDelegate
,然后执行以下操作:
...
UITextField* sizeField = [[UITextField alloc] initWithFrame:CGRectMake(185, 10, 100, 28)];
sizeField.delegate = self; //This is important!
sizeField.text = @"0";
...
【讨论】:
我添加了该行,但是文本字段没有识别出外部被触摸。我该如何解决?发布的代码所在的类是 NSObject 的子类,我无法正确设置 UITapGestureRecognizer 仅触摸UITextField
的外部不会触发该方法,因为它需要触发您需要 a) 触摸另一个可以成为第一响应者的 ui 元素(例如另一个文本字段)或 b ) 点击键盘上的完成按钮(或等效的 ie.search)。【参考方案2】:
一些观察:
-
正如另一张海报所建议的,请确保正确设置键盘的代理。
如果您想在键盘返回时关闭键盘,请确保您的自定义键盘上有一个并且已正确设置为调用
...ShouldReturn
方法。
如果你想在外面的水龙头上关闭,你必须自己做。
您在设置它的方法内声明sizeField
,然后从该范围之外的另一个方法调用它。我假设您有一个名为sizeField
的类变量,否则您会遇到编译器错误。然而,当你像你一样设置它时再次声明它会隐藏类变量声明,因此它永远不会被设置。顺便说一句,这是一个内存泄漏。
如果其他一切都正确,这不应该影响程序的实际运行(但如果,例如 4 是问题并且没有修复),但我认为调用 [textField resign...]
而不是 @987654325 更好的形式@。至少你应该assert(textField == sizeField)
。
【讨论】:
以上是关于UITableViewCell 与 TextField 并检查输入的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewCell 与 UITextField 失去选择 UITableView 行的能力?
自定义uitableviewcell时,registerNib与registerClass的区别(转载)
UIMenucontroller 与 uitableviewcell 上的 uitextview
UITableViewCell 中的 UIStackView 与多行 UILabel