Отслеживание объекта firstResponder - PullRequest
2 голосов
/ 02 октября 2010

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

@implementation SimplePickerViewController
@synthesize pickerKeyboard;
@synthesize textView;
@synthesize textView2;
@synthesize firstResponder;

-(void)viewDidLoad{
    pickerKeyboard = [[PickerKeyboardViewController alloc] initWithNibName:@"PickerKeyboard" bundle:nil];
    pickerKeyboard.delegate = self;
    [self.textView setInputView:pickerKeyboard.view];
    [self.textView setDelegate:self];
    [self.textView2 setInputView:pickerKeyboard.view];
    [self.textView2 setDelegate:self];
}

-(void)hideKeyboard{
    [self.firstResponder resignFirstResponder];
    self.firstResponder = nil; //without this line, the code doesn't work.
}
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView{
    self.firstResponder = textView;
    [self.pickerKeyboard.picker reloadAllComponents];
    return YES;
}

Если я удаляю строку, устанавливающую firstResponder на nil, код перестает нормально работать, но я не уверен, почему. (Без этой строки я могу выбрать первый textView для вызова клавиатуры, но после этого я никогда не смогу вернуть клавиатуру. Любые идеи? Спасибо!

Ответы [ 2 ]

3 голосов
/ 15 апреля 2011

Я не уверен, что понимаю, почему firstResponder необходимо отслеживать, чтобы работала пользовательская клавиатура. Я использую пользовательскую клавиатуру, не зная, что является первым респондентом.

Используете ли вы:

textView.inputView = pickerKeyboard

Как насчет следующего, вызванного на вид отставки первого респондента:

[self.view endEditing:NO];
2 голосов
/ 16 ноября 2011

У меня была похожая проблема, и я только что выяснил проблему. Где-то в части кода первого респондента Apple они используют селектор с именем firstResponder. Когда вы создали свойство firstResponder, вы непреднамеренно отвергли этот селектор. Это приведет к сбою кода Apple. Это, по моему скромному мнению, ошибка в структуре Apple, и метод firstResponder нигде не документирован. Назовите вашу собственность myFirstResponder или что-нибудь еще, и все должно работать нормально.

См. Почему клавиатура не отображается при извлечении вида из стека навигации?

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