2014-09-02 3 views
1

У меня есть несколько текстовых полей в контроллере моего представления, как я могу перемещаться из одного в другое с помощью кнопки возврата на клавиатуре IOS.Навигация с помощью кнопки возврата в яблочной клавиатуре

+0

вы можете использовать метки для этой – BHASKAR

+0

@BHASKAR может у показать мне, как, потому что я новичок в ИО, пожалуйста – mowi

+1

Показать ссылку здесь является решением следующей предыдущей кнопки http://stackoverflow.com/questions/5591792/how-to-get-keyboard-with-next-previous-and-done-button – BHASKAR

ответ

1

UITextFieldDelegate Используйте делегат и метод textFieldShouldReturn:. Внутри вы можете получить тег textfield, переданный в аргументе, и передать его другому, основанному на этой информации.

Чтобы иметь делегат рабочий Вы должны установить делегат свойство отправителя (текстовое поле), чтобы быть приемником (например ваш контроллер представления)

myTextField.delegate = self; 

или сделать это в раскадровке (here is some storyboard hints). то Ваше мнение контроллер должен указать этот делегат следующим образом (в файле «H»):

@interface MyViewController:UIViewController<UITextFieldDelegate> 
@end 

, а затем в файле «м»

-(BOOL)textFieldShouldReturn:(UITextField*)textfield{ 
    if([textfield tag] == 1) 
    { 
     //pass focus to next textfield 
     [self.nextTextField becomeFirstResponder]; 
    } else { 
     //remove focus from current textfield 
     [textfield resignFirstResponder];// 
    } 
    return YES;//YES if textfield should implement its default behaviour 
} 
+0

Я пишу этот метод в моем представлении, контроллер ничего не меняет – mowi

+0

Вы установили 'delegate' на текстовые поля, чтобы указать на ваш просмотреть контроллер? –

+0

нет, как я могу это сделать? – mowi

0
-(BOOL) textFieldShouldReturn: (UITextField *) textField 
    { 
    [textField resignFirstResponder]; 
    if(textField == _your1stTextField) 
     [_your2ndTextField becomeFirstResponder]; 
    return YES; 
    } 
0

попробовать это ...

набор делегатов всех текстовых полей, а затем ..

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
    { 
     if (textField == textField1) 
     { 
     [textField2 becomeFirstResponder]; 
     } 
     else if (textField == textField2) 
     { 
     [textField3 becomeFirstResponder]; 
     } 
     else if textField == textField3) 
     { 
     [textField4 becomeFirstResponder]; 
     }  
     . 
     . 
     . 

     [textField resignFirstResponder]; 

     return YES; 
    } 
0

Я думаю, что это решение является более динамичным, как это работает для любого онемели ЭВ TextFields, пока ваш SuperView не имеет представления с тегом == lastTextField.tag + 1

В viewDidLoad:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.textField1.delegate = self; 
    self.textField2.delegate = self; 
    ... 
    self.lastTextField.delegate = self; 

    self.textField1.tag = 1; 
    self.textField2.tag = 2; 
    ... 
    self.lastTextField.tag = n; 
} 

Затем осуществить textFieldDelegate:

-(BOOL) textFieldShouldReturn:(UITextField *)textField 
{ 
    NSInteger nextTag = textField.tag + 1; 
    UIResponder* nextResponder = [textField.superview viewWithTag:nextTag]; 

    if (nextResponder) 
     [nextResponder becomeFirstResponder]; 
    else 
     [textField resignFirstResponder]; 

    return NO; 
} 
+0

любая идея, если я хочу перейти от текстового поля к кнопке с помощью кнопки возврата на клавиатуре ??? – mowi

+0

Как показано здесь: https://developer.apple.com/library/ios/documentation/uikit/reference/UIButton_Class/UIButton/UIButton.html, UIButton наследуется от UIResponder.Не пробовал, но он определенно должен работать, если ваш последний помеченный вид является UIButton. – grimdox

0

Вы должны объявить в .h

.m набор

yourTextfieldRef1.delegate=self; 
yourTextfieldRef2.delegate=self; 
yourTextfieldRef3.delegate=self; 
yourTextfieldRef4.delegate=self; 
yourTextfieldRef5.delegate=self; 
. 
. 
. 

набора

yourTextFieldRef1.tag=1; 
yourTextFieldRef2.tag=2; 
yourTextFieldRef3.tag=3; 
yourTextFieldRef4.tag=4; 
yourTextFieldRef5.tag=5; 
. 
. 
. 


-(BOOL)textFieldShouldReturn:(UITextField*)textField; 
    { 
     NSInteger nextTag = textField.tag + 1; 
     // Try to find next responder 
     UIResponder* nextResponder = [textField.superview viewWithTag:nextTag]; 
     if (nextResponder) { 
      // Found next responder, so set it. 
      [nextResponder becomeFirstResponder]; 
     } else { 
      // Not found, so remove keyboard. 
      [textField resignFirstResponder]; 
     } 
     return YES; 
    } 

Надеется, что это поможет вам ...!