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
вызывается при нажатии клавиши возврата на мягкой клавиатуре.
Я попытался нажать прямо на клавиатуру ноутбука, и он, казалось, прыгнул между всеми текстовыми полями в том порядке, в котором вы добавили их в представление, но не попадал ни в какие другие типы полей (Кнопки и др.).
Клавиша на клавиатуре имитирует клавишу на мягкой клавиатуре симулятора, которая работает так, как ожидалось.