Хорошо, так что я на самом деле понял (я верю), что задал твой вопрос ... и на всякий случай, если кто-нибудь наткнется на это из 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 тип поповера / кнопки, из которой он появится.Но это основная предпосылка, из которой вы можете пойти.
Надеюсь, это поможет!