Сохранять ли выровненную панель инструментов iPhone видимой при первой смене респондента

Я использую метод, описанный Джошем вэтот вопрос добавить панель инструментов в верхней части клавиатуры iPhone. По сути, идея заключается в следующем:

Add the view controller as an observer for the notifications UIKeyboardWillShowNotification and UIKeyboardWillHideNotification in its initialization method Whenever those notifications are posted, animate a toolbar onto/off of the screen along with the keyboard

У меня также есть несколько полей UITextField на экране, все из которых становятся первым респондентом, когда он выбран для редактирования, и оставляют первый респондент, когда редактирование завершено (либо пользователь касается другого текстового поля, либо выключает любое текстовое поле, либо нажимает «Готово» на клавиатура - у меня естьtextFieldShouldReturn: переопределеноresignFirstResponder).

У меня, однако, есть проблема, поскольку уведомления публикуются каждый раз, когда я переключаюсь между текстовыми полями. Например, если пользователь редактирует текстовое поле A, затем заканчивает его и нажимает на текстовое поле B, A уходит в отставку первым респондентом, а B становится первым респондентом. Тем не менее, в этом сообщении также отображается сообщение "покажет" и & quot; будет скрывать & quot; Уведомления для моего просмотра контроллера.

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

Есть ли способ ответить только на "Будет {показывать, скрывать}" & quot; уведомления, если клавиатураactually собираешься показать или спрятать? Другими словами, как я могу игнорировать уведомления, которые не приведут к изменению видимого состояния клавиатуры?

Ответы на вопрос(2)

я завел следующую реализацию. Он используетBOOL отслеживать, находится ли контроллер междуtextFieldShouldBeginEditing: а такжеtextFieldDidBeginEditing: сообщение, а также ивар для отслеживания текущего редактируемого текстового поля.

Реализация предполагает, что интерфейс имеет следующее, с соответствующими свойствами и@synthesize маркеры. MyKeyboardToolbar является подклассом UIToolbar с настраиваемым инициализатором для создания своих собственных кнопок.

BOOL shouldBeginEditing;
UITextField *editingField;
MyKeyboardToolbar *keyboardBar;

И сам код:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    // Give up first responder so the keyboard goes away
    [textField resignFirstResponder];

    return YES;
}

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    self.shouldBeginEditing = YES;
    return YES;
}

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    self.shouldBeginEditing = NO;
    self.editingField = textField;
}

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
    // Do things here with the edited data (e.g. save it somewhere)

    return YES;
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
    self.editingField = nil;
}

// These methods are added as the observers to the notification center
- (void)keyboardWillShow:(NSNotification *)notification {
    if(self.keyboardBar == nil) {
        // Create and show the keyboard toolbar
    }
}

- (void)keyboardWillHide:(NSNotification *)notification {
    if(![self shouldBeginEditing]) {
        // Animate the bar off the screen, if necessary

        // Remove and dispense of the bar entirely
        [self.keyboardBar removeFromSuperview];
        self.keyboardBar = nil;
    }
}

// This method's selector is given to the keyboard toolbar's Done button
- (void)didPressKeyboardBarDoneButton {
    [self.editingField resignFirstResponder];
}
 22 янв. 2010 г., 05:13
Большое спасибо за размещение этого продолжения. Это было очень полезно, так как я был в похожей ситуации.
Решение Вопроса

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

 Tim10 июл. 2009 г., 06:00
Я надеялся, что до этого не дойдет :) Спасибо!
 10 июл. 2009 г., 06:02
Да, это боль. На днях они предоставят нам панель инструментов поверх клавиатуры, и мы прекратим взламывать ее, чтобы она заработала.

Ваш ответ на вопрос