Я показываю popover в iPad с панелью UINavigation. На втором представлении у меня есть UISearchController, который может отображать клавиатуру. Клавиатура подталкивает всплывающее окно, что хорошо, однако, если я сейчас нажму кнопку «назад» на панели UINavigation, он отклонит клавиатуру, которая прекрасна, но popover не вернется в исходное положение. Кто-нибудь знает, как это исправить? Благодаря!UIPopoverController не перемещается в исходное положение после нажатия слайдов клавиатуры
ответ
Хорошо, поэтому я действительно понял (я считаю), что ваш вопрос задавал ... и на всякий случай кто-то натыкается на это из Google, я решил, что отвечу, как я это сделал. Это похоже на взломанную работу, но я не смог найти другого способа сделать это.
В контроллере, который приносит клавиатуру, я имел это опубликовать уведомление всякий раз, когда клавиатура увольняет:
[aTextField resignFirstResponder];
[[NSNotificationCenter defaultCenter] postNotificationName:@"movePopups" object:nil];
Потом обратно на мой контроллер домашнего экрана, который управляет UIPopover, я добавил слушатель:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(movePopUpToRightLocation)
name:@"movePopups"
object:nil];
внутри init. Обязательно помните, чтобы удалить слушатель в вашем dealloc для хорошей практики программирования:
[[NSNotificationCenter defaultCenter] removeObserver:self];
Итак всякий раз, когда я получаю уведомление о том, что клавиатура исчезает, я получаю ссылку на эту кнопку, что поповер показывает вверх от и просто у него вновь появляются непосредственно из него:
-(void)movePopUpToRightLocation {
NSLog(@"move pop up to right location");
if (morePopUp) {
UIBarButtonItem *barButtonItem = (UIBarButtonItem *)[[bottomToolBar items] objectAtIndex:0];
[morePopUp presentPopoverFromBarButtonItem:barButtonItem
permittedArrowDirections:UIPopoverArrowDirectionDown
animated:YES];
}
}
Я не добавил проверки, для которых всплывет это, но я могу легко сделать, если у меня есть более чем 1 тип пирог/который будет отображаться. Но это основная предпосылка, из которой вы можете идти.
Надеюсь, это поможет!
Вы также можете зарегистрироваться для UIKeyboardDidHideNotification где-то в инициализаторе.
[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movePopoverBack:) name:UIKeyboardDidHideNotification object:nil];
Этот код перемещает поповер назад:
- (void)movePopoverBack:(id)sender {
if ([self.settingsPopoverController isPopoverVisible]) {
[self performSelector:@selector(hidePopover) withObject:nil afterDelay:0.1];
[self performSelector:@selector(movePopoverBack) withObject:nil afterDelay:0.5];
}
}
- (void)hidePopover {
[self.settingsPopoverController dismissPopoverAnimated:YES];
}
- (void)movePopoverBack {
[self.settingsPopoverController
presentPopoverFromBarButtonItem:self.bottomToolbar.settingsButton
permittedArrowDirections:UIPopoverArrowDirectionDown
animated:YES];
}
Я не получить его работу без задержек, но это, кажется приемлемым для моего текущего проекта. Надеюсь, это поможет кому-то.
После нажатия кнопки «Назад» вы должны вручную вызвать resignFirstResponder
для поля поиска (например, внутри viewDidDisappear
).
Это должно помочь, но вопрос все равно будет воспроизведен под прошивкой 4, когда устройство находится в альбомной ориентации с Hthe Ом кнопки на левой стороне
Спасибо! Это полезно для кого-то, кого я уверен. – paranoidroid