Simulate Tab Key Нажмите в iOS SDK

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

Ответы

Ответ 1

Как Уильям Ниу прав, но вы также можете использовать этот код, объясненный ниже.

Я использовал это и получил успех. Теперь рассмотрим пример UITextField...

Вы можете использовать метод делегата UITextView -(BOOL)textFieldShouldReturn:(UITextField*)textField, как описано ниже.

Но прежде чем делать это, вам нужно дать тег каждому UITextField в порядке Increment... (Приращение не требуется, но для моего кода требуется, вы также можете использовать порядок декремента, но некоторые изменения кода для этого)

- (BOOL)textFieldShouldReturn:(UITextField *)textField {

    NSInteger nextTag = textField.tag + 1;
    UIResponder* nextResponder = [self.view viewWithTag:nextTag];   
    if (nextResponder) {
        [nextResponder becomeFirstResponder];       
    } else {
        [textField resignFirstResponder];
    }
    return YES;
}

Надеюсь, это сработает для вас...

Счастливое кодирование....

Ответ 2

Вы можете определить "порядок табуляции", используя свойство тега. В следующей статье описывается, как найти следующий индекс тега для перехода на UITextField s, Как перемещаться по текстовым полям (кнопки "Далее/Готово" ).

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

-(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];

    return NO;
  }

  // Try to find the first responder instead...
  // Assuming the first tag index is 1
  UIResponder* firstResponder = [textField.superview viewWithTag:1];
  if (firstResponder) {
    // loop back to the first responder
    [firstResponder becomeFirstResponder];
  } else {
    // Not found, so remove keyboard.
    [textField resignFirstResponder];
  }

  return NO; // We do not want UITextField to insert line-breaks.
}

Если вам нужен элемент пользовательского интерфейса, отличный от UITextField, вы все равно сможете использовать ту же логику с еще несколькими проверками.

Ответ 3

Не уверен, что это помогает, но в контексте UITextFields, если вы реализуете UITextFieldDelegate, - (BOOL)textFieldShouldReturn:(UITextField *)textField вызывается при нажатии клавиши возврата на мягкой клавиатуре.

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

Клавиша

на клавиатуре имитирует клавишу на мягкой клавиатуре симулятора, которая работает так, как ожидалось.