1

当按下添加的“完成”UIBarButtonItem 时,我试图验证 UITextField 中的输入,但由于其目标设置为我正在编辑的 UITextField,因此我无法调用自定义验证方法。有谁知道如何解决这个问题?我试图通过用 validateInput(自定义方法)替换“resignFirstReponder”来添加自定义方法,但它会引发异常错误,因为目标 textField 没有调用的方法,我想。如果我将目标设置为“自我”,那么它不会将“完成”按钮添加到 UITextField。请帮忙。

对不起,我没有把整个代码。以下是围绕此功能的完整代码:

- (void) addDoneButton: (UITextField *) textField
{
    UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone                                                                                 target:textField action:@selector(resignFirstResponder)];
    UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    toolbar.items = [NSArray arrayWithObject:barButton];

    textField.inputAccessoryView = toolbar;    
}

- (void) viewDidLoad{

    [super viewDidLoad];
    [self addDoneButton:txtBox];    
 }
4

3 回答 3

0

只需在您的barButtom财产上设置操作:

[barButton setAction:@selector(myValidationMetod)];

在该方法内的 textField 上使用任何验证。

于 2013-04-06T16:48:53.257 回答
0

我猜目标应该是自我并采取行动:@selector(yourCustomMethod)。

-(void)yourCustomMethod
{
  if(textField.length>0)
     {
       NSLog(@"textField Validated");
     }
}
于 2013-04-06T16:55:02.493 回答
0

你需要做的是让完成按钮调用控制器上的一个方法,然后控制器将负责验证text和调用resignFirstResponder.

看起来像这样

UIBarButtonItem *barButton =
  [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                                                target:self
                                                action:@selector(doneTapped)];

UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
toolbar.items = @[ barButton ];

self.textField.inputAccessoryView = toolbar;

现在您需要实现该doneTapped方法

- (void)doneTapped
{
  [self.textField resignFirstResponder];

  NSString *text = self.textField.text;

  // validate text
}
于 2013-04-06T17:10:26.983 回答