【问题标题】:dismissing Number Pad解雇数字键盘
【发布时间】:2011-03-08 19:30:38
【问题描述】:

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

【问题讨论】:

  • 但是肯尼在其中提到我们必须添加返回键我想知道如果不添加完成键我们就不能这样做
  • 当然你可以不用 Done 键,只需创建一个 -resignFirstResponder 的方法(如 @PurplePilot 的答案。)
  • thx Kenny .....但是背景点击和 nameField 是什么?

标签: iphone objective-c interface-builder uitextfield


【解决方案1】:

你需要添加一个背景水龙头

-(IBAction)backGroundTap:(id)sender

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

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

【讨论】:

  • thx Purple.......但是什么是 backgroundtap 和 nameField 是文本字段的名称?这里的 nameField 是什么?
  • UITapGestureRecognizer *tapBackground = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapBackground:)]; [self.view addGestureRecognizer:tapBackground];
  • 添加背景点击手势识别器
【解决方案2】:

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

- (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];
}

【讨论】:

  • 这是最好的解决方案
【解决方案3】:

如果您知道要输入的数字的长度(例如 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];

}

【讨论】:

  • 对此表示感谢!谢谢你:)
【解决方案4】:

另一种很容易实现的解决方案,用于更改输入焦点或关闭键盘。

实现这个函数(和委托 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
}

没有别的了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-18
    • 2018-03-13
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多