Как изменить UIControl с акцентом на iPhone?

Я пытаюсь сделать то, что, как мне казалось, будет простым.

У меня есть форма с двумя UITextFields. Я использую стиль UIReturnKeyNext в первом. Идея состоит в том, что когда пользователь заполняет первое поле, он нажимает «Далее», и я перехожу к следующему UITextField. Я видел другие приложения, которые делают это, и они действительно хорошо работают. Но я не могу понять, как установить фокус на следующее поле.


person Andy    schedule 22.01.2009    source источник


Ответы (2)


Простой. отправьте сообщение статьFirstResponder в другое текстовое поле. Когда другое текстовое поле принимает статус первого респондента, оно будет получать информацию с клавиатуры.

Например:

//called when the next button is pressed
//Assume textField1, 2, and 3 are instances of UITextField
-(IBAction) nextPressed: (id) sender {
      if ([textField1 isFirstResponder]) {
         [textField2 becomeFirstResponder];
      }
      if ([textField2 isFirstResponder]) {
         [textField3 becomeFirstResponder];
      }

}
person Brad The App Guy    schedule 22.01.2009
comment
Это была моя первая мысль, но меня смутила документация, в которой четко указано, что статьFirstResponder используется для уведомления UIResponder, когда они собираются стать первым респондентом. В Mac OSX NSResponder запрещает прямой вызов статьFirstResponder. Но, оказывается, вы правы. - person Andy; 22.01.2009
comment
Вы связываете nextPressed с каждым текстовым полем (в приведенном выше примере, который будет связывать его с textField1, 2, 3) ??? - person Zach Smith; 03.01.2010
comment
Да, если вы используете построитель интерфейса, вы можете связать действие Touch Up Inside всех текстовых полей с одним и тем же методом nextPressed, подключив каждое из них к собственному IBOutlet (textField1, textField2 и т. Д.) - person Brad The App Guy; 03.01.2010
comment
использование Touch Up Inside для меня не работает. Я пробовал это, а также Editing Did End ... ничего :( - person jowie; 28.11.2010
comment
Я обнаружил, что ответ на другой вопрос более сложный stackoverflow.com/questions/1347779/ - person hiroshi; 04.11.2011

Приведенный выше ответ отлично работает, за исключением того, что вы хотите, чтобы resignFirstResponder использовался в исходном текстовом поле.

Если вы не откажетесь от первого респондента, автоматическая настройка прокрутки IOS не будет работать, когда следующее поле станет первым респондентом. (Клавиатура может закрывать следующее текстовое поле.)

-(IBAction) nextPressed: (id) sender {

    //Resign first so that when the next field becomes firstResponder 
    //the text field will scroll into place if covered by the keyboard
    [sender resignFirstResponder];      

    if ([textField1 isFirstResponder]) {
       [textField2 becomeFirstResponder];
    }
    if ([textField2 isFirstResponder]) {
       [textField3 becomeFirstResponder];
    }
}
person zachzurn    schedule 10.05.2012
comment
Погодите ... какая настройка автоматической прокрутки iOS?!? Всегда видел, что с такой прокруткой приходится справляться самому. У меня есть простое приложение с несколькими UITextFields на нем, и они определенно не прокручиваются в поле зрения, когда клавиатура закрывает их. Что мне не хватает? - person Joe Strout; 13.08.2012
comment
Это встроено в IOS. Вполне уверен, что ваши текстовые поля должны находиться внутри представления, которое находится внутри UIScrollView. - person zachzurn; 14.08.2012
comment
Ах, хорошо, возможно, это поведение UIScrollView ... в этом есть смысл. Впрочем, в других случаях это не особенно полезно. - person Joe Strout; 15.08.2012