Симуляция нажатия клавиши Tab в iOS SDK - PullRequest
14 голосов
/ 15 октября 2010

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

Ответы [ 3 ]

9 голосов
/ 30 июня 2011

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

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

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

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

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

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

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

Удачного кодирования ....

4 голосов
/ 26 июня 2011

Вы можете определить «порядок табуляции», используя свойство тега.В следующем посте описывается, как найти следующий индекс тега для перехода на 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, вы все равно должныиспользовать ту же логику с еще несколькими проверками.

0 голосов
/ 03 февраля 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...