2010-06-27 59 views
9

在我的應用程序中,我有一個文本字段,需要從用戶輸入一些數字,所以我將鍵盤類型設置爲「數字鍵盤」,但現在我被卡住了,應該如何解除它,當用戶完成輸入時。我知道我必須使用委託方法「textfieldShouldReturn」,但問題是,數字鍵盤沒有返回鍵。所以是否有必要在鍵盤上添加一個自定義的完成鍵還是有一些其他的出路?解除數字鍵盤

+0

[How to show button'Done'on number pad on iPhone?](http://stackoverflow.com/questions/584538/how-to-show-button-done-on-number-pad-在iPhone上) – kennytm 2010-06-27 10:48:25

+0

但肯尼在那個答案它提到,我們必須添加返回鍵我想知道我們不這樣做,而不添加完成鍵 – Siddharth 2010-06-27 10:50:54

+0

當然,你可以做到沒有完成鍵,只需創建一個方法來' resignFirstResponder'(如[@PurplePilot](http://stackoverflow.com/questions/3127104/dismissing-number-pad/3127138#3127138)的答案。) – kennytm 2010-06-27 11:00:50

回答

6

您需要添加一個背景自來水

-(IBAction)backGroundTap:(id)sender 

在點小時,然後在點M檔

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

thx紫色.......但是什麼是backgroundtap和nameField是文本字段的名稱?這裏nameField是什麼? – Siddharth 2010-06-27 11:00:00

+1

UITapGestureRecognizer * tapBackground = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapBackground :)]; [self.view addGestureRecognizer:tapBackground]; – 2014-04-28 11:58:36

+0

要添加背景輕拍手勢識別器 – 2014-04-28 11:59:17

41

另一個解決方案 - 添加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

太棒了,非常感謝你。 – CroiOS 2012-10-11 20:22:11

+1

這是最好的解決方案 – Shailesh 2014-03-03 09:22:50

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

} 
+0

這正是我期待的,謝謝! – Tander 2014-01-23 07:31:00

+0

不客氣。 – scipilot 2014-01-24 06:13:26

+0

感謝此!謝謝 :) – 2015-05-27 16:26:54

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 
} 

沒有別的!