2014-07-02 39 views
0

我有5個UITextFields彼此相鄰。每個人都應該捕獲一個針號的數字。這是我如何將輸入限制爲1個字符並將光標移動到下一個文本字段。如何在UITextField上觸發方法

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
    { 
     if (self.pin1.text.length == 1 && range.length == 0) [self.pin2 becomeFirstResponder]; 
     if (self.pin2.text.length == 1 && range.length == 0) [self.pin3 becomeFirstResponder]; 
     if (self.pin3.text.length == 1 && range.length == 0) [self.pin4 becomeFirstResponder]; 
     if (self.pin4.text.length == 1 && range.length == 0) [self.pin5 becomeFirstResponder]; 
     return YES; 
    } 

一旦用戶在最後一個文本字段(pin5)中輸入最後一位數字,我想添加一些功能來檢查引腳。現在NSLog會做。我該怎麼做呢?

如果我將這行代碼添加到shouldChangeCharactersInRange的末尾。您必須點擊一個數字兩次以獲取第5位數字。

if (self.pin5.text.length == 1 && range.length == 0) NSLog(@"Pin %@, %@, %@, %@, %@", self.pin1.text, self.pin2.text, self.pin3.text, self.pin4.text, self.pin5.text); 
+0

根據你的模式,你會不會只是增加一個if語句來檢查,如果文本已經被添加到5腳? – CrimsonChris

+0

有5個文本字段似乎非常有用... – trojanfoe

+0

@CrimsonChris - 好的想法,請參閱上面的編輯。 – user3626407

回答

0
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    if (string.length > 0 && textField.text.length < 1) { 
     textField.text = string; 
     if (textField == self.pin1) [self.pin2 becomeFirstResponder]; 
     else if (textField == self.pin2) [self.pin3 becomeFirstResponder]; 
     else if (textField == self.pin3) [self.pin4 becomeFirstResponder]; 
     else if (textField == self.pin4) [self.pin5 becomeFirstResponder]; 
     else if (textField == self.pin5) NSLog(@"Pin %@, %@, %@, %@, %@", self.pin1.text, self.pin2.text, self.pin3.text, self.pin4.text, self.pin5.text); 
    } 
    return (textField.text.length + string.length) <= 1; 
} 
+0

這是行不通的,第5次點擊它顯示引腳。由於某種原因,它開始於pin2並最終將2個字符放入pin5中? – user3626407

+0

@ user3626407更新了它。 – CrimsonChris

+0

非常感謝,現在當點擊數字鍵盤時,現在會填充pin1和pin2。 pin5仍然接受2個字符。我們快到了 – user3626407

0

如何添加最後的聲明?

if (self.pin5.text.length == 1 && range.length == 0) { 
    NSLog(@"Hey there!"); 
} 

您可能還想在開始時禁用所有的字段(第一個除外),以便您可以逐個啓用它們。

+0

我試過這個,並且出於一些奇怪的原因,您必須單擊第5個數字兩次才能調用此代碼。 – user3626407

0

只是return語句之前添加此行:

if (self.pin5 == textField) { 
    self.pin5.text = string; 
    [self.pin5 resignFirstResponder]; // You can hide the keyboard if you like 
    NSLog(@"Last text field"); 
} 
+0

我試過這個,出於一些奇怪的原因,你必須點擊第5個數字兩次來調用這段代碼。 – user3626407

+0

@ user3626407請參閱編輯答案。 – Greg

+0

同樣,必須再次點擊數字鍵盤上的第5位數字。 – user3626407

0

你可以試試這個。像這樣設置你的文本框。

[self.pin1 addTarget:self 
       action:@selector(textFieldDidChange:) 
    forControlEvents:UIControlEventEditingChanged]; 
... 
[self.pin5 addTarget:self 
       action:@selector(textFieldDidChange:) 
    forControlEvents:UIControlEventEditingChanged]; 

然後在另一個方法做到以下幾點:

-(void)textFieldDidChange:(id)sender { 
    if (sender == self.pin1) [self.pin2 becomeFirstResponder]; 
     else if (sender == self.pin2) [self.pin3 becomeFirstResponder]; 
     else if (sender == self.pin3) [self.pin4 becomeFirstResponder]; 
     else if (sender == self.pin4) [self.pin5 becomeFirstResponder]; 
     else if (sender== self.pin5) { 

      [self.pin5 resignFirstResponder]; 
      NSString *pinString = [NSString stringWithFormat:@"%@ %@ %@ %@ %@", self.pin1.text, self.pin2.text, self.pin3.text, self.pin4.text, self.pin5.text]; 
      NSLog(@"%@", pinString); 
     } 
} 
+0

我希望Apple會將這個動作添加到UITextFieldDelegate。 – CrimsonChris

+0

這個完美的作品!謝謝。 – user3626407

+0

@CrimsonChris是的,它是奇怪的,他們會有*應該*改變字符,但不是*做*改變字符。 – Milo

相關問題