解雇数字垫

时间:2010-06-27 10:45:25

标签: iphone objective-c interface-builder uitextfield

在我的应用程序中,我有一个文本字段,从用户输入一些数字输入,所以我将键盘类型设置为“数字键盘”,但现在我不知道如何在用户完成输入时解雇它。我知道我必须使用委托方法“textfieldShouldReturn”,但问题是数字键盘没有返回键。是否有必要在键盘上添加自定义完成键或有其他方法?

4 个答案:

答案 0 :(得分:42)

另一种解决方案 - 将inputAccessoryView添加到yourNumberTextFiled

inputAccessoryView

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIToolbar* numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
    numberToolbar.barStyle = UIBarStyleBlackTranslucent;
    numberToolbar.items = [NSArray arrayWithObjects:
                         [[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelNumberPad)],
                         [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
                         [[UIBarButtonItem alloc]initWithTitle:@"Apply" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)],
                     nil];
    [numberToolbar sizeToFit];
    numberTextField.inputAccessoryView = numberToolbar;
}

-(void)cancelNumberPad{
    [numberTextField resignFirstResponder];
    numberTextField.text = @"";
}

-(void)doneWithNumberPad{
    NSString *numberFromTheKeyboard = numberTextField.text;
    [numberTextField resignFirstResponder];
}

答案 1 :(得分:6)

您需要添加背景点按

-(IBAction)backGroundTap:(id)sender

在点h中,然后在点m文件中

-(IBAction)backGroundTap:(id)sender
[nameField resignFirstResponder];
[numberField resignFirstResponder];

答案 2 :(得分:4)

如果您知道要输入的号码的长度(例如4位数的PIN码),您可以在输入4个键后自动关闭键盘。

我遇到一个问题,在4个键之后辞职第一个响应者(如果你在辞职后返回YES会忽略最后一个按键,所以我在辞职时添加了一个异步延迟。

此代码位于UITextField委托中:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

    // max 4 keypresses
    if(range.location == 3){
        // async workaround for can't return YES after resignFirstResponder 
        [self performSelector:@selector(closeKeypad:)
                   withObject:textField
                   afterDelay:0.1
         ];
    }
    else if(range.location > 3){        
        return NO;
    }
    return YES;
}

-(void) closeKeypad:(UITextField*)textField {
    [textField resignFirstResponder];

}

答案 3 :(得分:0)

另一个非常容易实现的解决方案,它可用于更改输入焦点或解除键盘。

实现此功能(和委托UITextFieldDelegate):

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;

然后,当您想要关闭键盘或更改焦点时,您只需要调用这样的通知程序:

[self performSelector:@selector(focusNextField:) withObject:textField afterDelay:0.1];

最后,关掉这个键盘:

- (void) focusNextField:(UITextField *) textField
{
    [textField resignFirstResponder];
    // some code
}

别的!

相关问题