2010-08-21 5 views
8

Я показываю popover в iPad с панелью UINavigation. На втором представлении у меня есть UISearchController, который может отображать клавиатуру. Клавиатура подталкивает всплывающее окно, что хорошо, однако, если я сейчас нажму кнопку «назад» на панели UINavigation, он отклонит клавиатуру, которая прекрасна, но popover не вернется в исходное положение. Кто-нибудь знает, как это исправить? Благодаря!UIPopoverController не перемещается в исходное положение после нажатия слайдов клавиатуры

ответ

9

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

Надеюсь, это поможет!

+0

Спасибо! Это полезно для кого-то, кого я уверен. – paranoidroid

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]; 
} 

Я не получить его работу без задержек, но это, кажется приемлемым для моего текущего проекта. Надеюсь, это поможет кому-то.

0

После нажатия кнопки «Назад» вы должны вручную вызвать resignFirstResponder для поля поиска (например, внутри viewDidDisappear).

Это должно помочь, но вопрос все равно будет воспроизведен под прошивкой 4, когда устройство находится в альбомной ориентации с Hthe Ом кнопки на левой стороне