在'完成'按钮上添加验证方法添加到UITextField输入法

问题描述:

我想在UITextField中输入时添加'完成'UIBarButtonItem被按下,但由于其目标设置为UITextField我正在编辑,我无法调用自定义验证方法。有没有人有想法如何解决这个问题? 我试图通过用validateInput(自定义方法)替换“resignFirstReponder”来添加自定义方法,但它会引发异常错误,因为目标textField没有调用的方法,我推测。如果我将目标设置为'self',那么它不会将'done'按钮添加到UITextField。请帮忙。在'完成'按钮上添加验证方法添加到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];  
} 
+0

嘿,这是不是你做的方式,请发表你们需要的UI和您想要的功能。你的代码有很多错误。 – satheeshwaran 2013-04-06 16:49:45

+0

谢谢。我明白你的意思。我编辑了代码。这个可以吗? – Ryan 2013-04-07 03:31:05

只需设定行动的barButtom属性:

[barButton setAction:@selector(myValidationMetod)]; 

使用对方法内的文本框任何验证。

目标应该是我自我猜测和行动:@selector(yourCustomMethod)。

-(void)yourCustomMethod 
{ 
    if(textField.length>0) 
    { 
     NSLog(@"textField Validated"); 
    } 
} 
+0

谢谢。我将需要使我的自定义方法来验证输入。这很有帮助。 – Ryan 2013-04-07 03:34:14

什么你需要做的就是完成按钮呼叫控制器,那么这将是负责验证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 
} 
+0

谢谢。这很有帮助,但我没有正确地问我的问题。所以我更新了我的代码以提供更多背景。如果我设置目标'self','done'按钮不起作用...我想我需要将目标设置为UITextField,我想要'完成'按钮被连接到。 – Ryan 2013-04-07 03:32:54

+0

你试过这个吗?目标需要设置为将处理选择器的对象。在这种情况下,viewController(self)是处理操作的对象,而不是我试过的textField – 2013-04-07 10:02:24

+0

,但是当我将目标更改为'self'时,'done'按钮不起作用。我想用'完成'按钮关闭键盘。我认为这就是为什么当我将目标设置为“自我”时,按钮不起作用。不应该将目标设置为UITextField视图,因为它仅在键盘出现时出现? – Ryan 2013-04-07 12:55:37