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

UITableViewCell 与 UIScrollView 防止单元格触摸

UITableViewCell的选中时的颜色及tableViewCell的selecte与deselecte