У меня есть несколько текстовых полей в контроллере моего представления, как я могу перемещаться из одного в другое с помощью кнопки возврата на клавиатуре IOS.Навигация с помощью кнопки возврата в яблочной клавиатуре
ответ
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
}
-(BOOL) textFieldShouldReturn: (UITextField *) textField
{
[textField resignFirstResponder];
if(textField == _your1stTextField)
[_your2ndTextField becomeFirstResponder];
return YES;
}
попробовать это ...
набор делегатов всех текстовых полей, а затем ..
- (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;
}
Я думаю, что это решение является более динамичным, как это работает для любого онемели ЭВ 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;
}
любая идея, если я хочу перейти от текстового поля к кнопке с помощью кнопки возврата на клавиатуре ??? – mowi
Как показано здесь: https://developer.apple.com/library/ios/documentation/uikit/reference/UIButton_Class/UIButton/UIButton.html, UIButton наследуется от UIResponder.Не пробовал, но он определенно должен работать, если ваш последний помеченный вид является UIButton. – grimdox
Вы должны объявить в .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;
}
Надеется, что это поможет вам ...!
вы можете использовать метки для этой – BHASKAR
@BHASKAR может у показать мне, как, потому что я новичок в ИО, пожалуйста – mowi
Показать ссылку здесь является решением следующей предыдущей кнопки http://stackoverflow.com/questions/5591792/how-to-get-keyboard-with-next-previous-and-done-button – BHASKAR