2011-10-07 74 views
0

我目前正在用UITextField创建一个UITableViewCell。 点击文本字段,我想调出一个我创建的数字键盘。而当我输入时,textfield应该为我检查输入;点击其他地方时,键盘应该被解雇。带有TextField的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; 
} 

但键盘不下去了......

我如何验证输入和解雇键盘?

回答

3

你从来没有在你的文本框上设置委托,所以textFieldShouldReturn:被调用。确保你的类符合UITextFieldDelegate,然后执行以下操作:

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

我添加了该行,但是该文本字段没有意识到正在触摸外界。我如何解决这个问题?该代码发布的类是NSObject的孩子,我无法正确设置UITapGestureRecognizer – user959974

+0

只需触摸“UITextField”的外部不会触发该方法,因为它触发你需要a)触摸另一个UI元素可以成为第一响应者(例如另一个文本字段)或者b)敲击键盘上的完成按钮(或等同的ie.search)。 – Joe

+0

现在就工作了,谢谢! – user959974

0

几个意见:

  1. 作为另一个海报建议,确保你正确设置键盘的代表。
  2. 如果要在键盘返回时关闭键盘,请确保在自定义键盘上有一个键盘,并且它已正确设置为调用...ShouldReturn方法。
  3. 如果您想要在外面轻按,您必须自己做。
  4. 您正在声明sizeField在您设置它的方法中,然后从该范围之外的另一个方法调用它。我假设你有一个名为sizeField的类变量,或者你会得到一个编译器错误。然而,当你像你一样设置它的时候再次声明它会影响类变量声明,所以它永远不会被设置。顺便说一句,这是一个内存泄漏。
  5. 这应该不会影响程序的实际运行,如果其他都是正确的(但它会如果,例如4是问题,而不是固定的),但我认为这是更好的形式来呼吁[textField resign...]而不是[sizeField resign...]。至少你应该assert(textField == sizeField)