2009-12-08 64 views
5

我正在開發一個應用程序,以編程方式創建一些UITextField,並且我允許UITextField中的最大1個字符。如何以編程方式將光標移動到下一個UITextField?

這是完美的工作。

但書寫的字符後,用戶必須在未來UITextField再次點擊提交鍵盤

輸入1個字符,光標會自動移到下一UITextField後。

我該怎麼做?

回答

16

抓住代表通知你你的文本框已被更改。檢查新長度是否爲1.如果是,請在下一個字段中撥打becomeFirstResponder

+0

這是如何完成的?你可以展示一些示例代碼嗎? – quantum 2010-11-18 16:08:35

+0

'[textField becomeFirstResponder]' – akashivskyy 2012-12-27 09:38:07

4

我發現這種方法..

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

    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; 

    if(textField == textField1) 
    { 
     if (textField1.text.length > 0 && range.length == 0) 
     { 
      return NO; 
     } 
     else { 
      [textField1 setText:newString]; 
      [textField2 becomeFirstResponder]; 
      return YES; 
     } 
    } 
    else if(textField == textField2) 
    { 
     if (textField2.text.length > 0 && range.length == 0) 
     { 
      return NO; 
     }else { 
      [textField2 setText:newString]; 
      [textField3 becomeFirstResponder]; 
      return YES; 
     } 
    } 
} 

我們可以做的另一種說法... 聲明在viewDidLoad中和方法這一行。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(endEditingTextField:) name:@"UITextFieldTextDidChangeNotification" object:txtfield1]; 

- (void) endEditingTextField:(NSNotification *)note { 
    if ([[txtfield1 text] length] > 0) 
    { 
     [txtfield1 resignFirstResponder]; 
     [txtfield2 becomeFirstResponder]; 
    } 
} 

希望這有助於...

+0

它不起作用? – 2014-05-31 10:25:55

+0

它爲我工作。任何方式我添加另一種方式來做到這一點。 – 2014-06-10 15:42:34

0

您對只使用

[textField'sName becomeFirstResponder]; 
1

這可以在3個簡單步驟來完成:

  1. 目前的文本字段應爲光標辭職。
  2. 計算以下文本字段
  3. 使以下文本字段獲得光標。

在代碼:

if ([currentTextFieldWithCursor canResignFirstResponder]) [currentTextFieldWithCursor resignFirstResponder]; 
UITextField *followingTextField = // just get it! 
if ([followingTextField canBecomeFirstResponder]) [followingTextField becomeFirstResponder]; 

希望它能幫助。

2

以上解決方案不起作用。該解決方案也爲我工作:

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

    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; 

    if(firstCodeField == textField){ 
     [firstCodeField setText:newString]; 
     [secondCodeField becomeFirstResponder]; 
    } 
    if(secondCodeField == textField){ 
     [secondCodeField setText:newString]; 
     [thirdCodeField becomeFirstResponder]; 
    } 

    NSUInteger newLength = [textField.text length] + [string length] - range.length; 
    return (newLength > 1) ? NO : YES; 
} 
1

剛剛成立

UITextFieldDelegate

,並在過去的.m文件這種方法。它將適用於OTP文本框。

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

    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; 

    if(_txt1 == textField){ 
     if ([_txt1.text length] == 0) { 
      [_txt1 setText:newString]; 
       [_txt2 becomeFirstResponder ]; 
     } 

    } 
    if(_txt2 == textField){ 

     if ([_txt2.text length] == 0) { 
       [_txt2 setText:newString]; 
       [_txt3 becomeFirstResponder]; 
     } 

    } 

    if(_txt3 == textField){ 

     if ([_txt3.text length] == 0) { 
       [_txt3 setText:newString]; 
       [_txt4 becomeFirstResponder]; 
     } 

    } 

    if(_txt4 == textField){ 

     if ([_txt4.text length] == 0) { 
      [_txt4 setText:newString]; 
     } 

    } 

    NSUInteger newLength = [textField.text length] + [string length] - range.length; 
    return (newLength > 1 && newLength == 2) ? NO : YES; 
} 

希望這項工作對任何人。 :)