带有TextField的UITableViewCell并检查输入

时间:2011-10-07 20:29:04

标签: iphone objective-c ios uitableview

我目前正在创建一个带有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;
}

但键盘不会消失......

如何验证输入并关闭键盘?

2 个答案:

答案 0 :(得分:3)

您永远不会在文本字段中设置委托,以便调用textFieldShouldReturn:。确保您的班级符合UITextFieldDelegate,然后执行以下操作:

...
UITextField* sizeField = [[UITextField alloc] initWithFrame:CGRectMake(185, 10, 100, 28)];
sizeField.delegate = self; //This is important!
sizeField.text = @"0";
...

答案 1 :(得分:0)

一些观察结果:

  1. 如另一张海报建议,请确保正确设置键盘的委托。
  2. 如果您想在键盘返回时关闭键盘,请确保您的自定义键盘上有一个键盘,并且它已正确设置为调用...ShouldReturn方法。
  3. 如果你想解雇外面的水龙头,你必须自己做。
  4. 您在设置它的方法中声明sizeField,然后从该范围之外的其他方法调用它。我假设您有一个名为sizeField的类变量,或者您将收到编译器错误。但是,当你进行设置时再次声明它就像阴影类变量声明那样它永远不会被设置。顺便说一句,那是内存泄漏。
  5. 如果所有其他方法都正确,这不应该影响程序的实际运行(但是如果问题是4,问题并没有修复),但我认为最好是调用[textField resign...]代替[sizeField resign...]。至少你应该assert(textField == sizeField)