Игнорировать символ табуляции в UITextField ... (приложение для iPad) - PullRequest
13 голосов
/ 27 октября 2010

У меня есть TableView с TextFields в каждой ячейке, и я хочу, чтобы эти текстовые поля игнорировать символьную вкладку (\t).

При нажатии клавиши табуляции метод textField:shouldChangeCharactersInRange не называется

.

Кто-нибудь знает, как это сделать? Я знаю, что в iPad нет клавиши табуляции клавиатура, но blutooth и док-станции делают и вызывают действительно странное поведение.

Спасибо

Ответы [ 5 ]

3 голосов
/ 16 июня 2015

Реализуйте этот метод:

Добавьте это в свой AppDelegate.m

- (NSArray *)keyCommands {
static NSArray *commands;

static dispatch_once_t once;
dispatch_once(&once, ^{
    UIKeyCommand *const forward = [UIKeyCommand keyCommandWithInput:@"\t" modifierFlags:0 action:@selector(ignore)];
    UIKeyCommand *const backward = [UIKeyCommand keyCommandWithInput:@"\t" modifierFlags:UIKeyModifierShift action:@selector(ignore)];

    commands = @[forward, backward];
});

return commands;
}

Добавьте этот метод в ViewController.m или подкласс UITextField, в котором вы хотите обработать TAB ключевое событие

- (void)ignore {

    NSLog(@"Your Action");
} 

Описано в: Как установить порядок вкладок в iOS?

3 голосов
/ 27 мая 2011

Кажется, это проблема с символом табуляции (\t). Этот символ не обрабатывается как обычные символы (например, a, b, c, 0, 1, 2, ...) и, следовательно,

              - (BOOL)textField:(UITextField *)textField 
  shouldChangeCharactersInRange:(NSRange)range 
              replacementString:(NSString *)string;

метод делегата никогда не будет вызван.

Результат использования вкладки, например, внешняя клавиатура или в симуляторе означает, что активное в данный момент текстовое поле отказывается от статуса первого респондента и результата

[textField nextResponder]

станет первым респондентом.

В настоящее время IMO является ошибкой (iOS SDK 4.3) в том, что метод делегата

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField

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

2 голосов
/ 05 июня 2011

Я думаю, что это возможно, но сложно. По сути, я хотел бы убедиться, что, когда текстовое поле становится первым респондентом, никакое другое представление не может стать первым респондентом. Тогда нажатие вкладки ничего не сделает. Затем вам придется обратить этот эффект вспять, если выбрано другое представление, которое фактически может стать первым респондентом, или когда текстовое поле подает в отставку первый респондент.

2 голосов
/ 28 октября 2010

Убедитесь, что делегат для UITextField установлен в IB или коде.Убедитесь, что в вашем файле .h указан UITextFieldDelegate

Все должно работать.

1 голос
/ 27 октября 2010

Вы пробовали проверять другие символы в диапазоне, который вы вызываете, должны поменятьCharactersInRange?Это позволит убедиться, что он не вызывается должным образом (особенно в отношении проблемы с клавишей табуляции).

Подробнее о shouldChangeCharactersInRange здесь

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