iPhone SDK: обработка внешнего вида клавиатуры - PullRequest
0 голосов
/ 13 ноября 2009

Мне нужно переместить элементы интерфейса моего контроллера вида, когда появляется клавиатура. Я делаю это, регистрируясь для уведомлений клавиатуры в моем делегате приложения:

[[NSNotificationCenter defaultCenter] addObserver:observer selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];</p> <pre><code>[[NSNotificationCenter defaultCenter] addObserver:observer selector:@selector(keyboardWasHidden:) name:UIKeyboardDidHideNotification object:nil];

, а затем обработка уведомлений, как предписано Apple (у меня был похожий код для клавиатуры, был показан), чтобы прокрутить представление вверх и вниз:

- (void)keyboardWasHidden:(NSNotification*)aNotification { CGRect viewFrame = [self.view frame]; viewFrame.origin.y += keyboardSize.height - TOOLBAR_HEIGHT; self.view.frame = viewFrame; }

Все идет нормально. Теперь описание проблемы:

Когда я выполняю этот код, чтобы показать пользовательский интерфейс сообщения для OS 3.0:

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; picker.mailComposeDelegate = self; [self presentModalViewController:picker animated:YES];

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

Я надеялся временно отключить уведомление клавиатуры, чтобы мой код прокрутки не вызывался с этой строкой:

[[NSNotificationCenter defaultCenter] removeObserver:self];

Но это не помогает, клавиатура даже все равно выкладывается.

Что я должен делать, чтобы не реагировать на клавиатуру, когда она создается пользовательским интерфейсом сообщения?

1 Ответ

1 голос
/ 13 ноября 2009

Добавьте свойство BOOL или переменную экземпляра: careAboutKeyboard, которое доступно для ваших методов keyboardWasShown: и keywardWasHidden:, скорее всего, в контроллере представления эти методы находятся.

Установите в YES, когда используется метод viewWillAppear, и в NO, когда вы просматриваете почту, и в viewWillDisappear.

.

Затем поместите всю логику прокрутки в блок if:

if(careAboutKeyboard) {
    // Scrolling logic
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...