Загрузка нового UIView поверх root UIView на UIB Нажать кнопку из UIPopovercontroller - PullRequest
0 голосов
/ 09 февраля 2011

Мое приложение очень простое, и я не использую контроллер splitview. У меня вопрос ... как я могу загрузить новый пользовательский интерфейс через мой корневой контроллер представления на UIButton click из представления popovercontroller.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2011
[[NSNotificationCenter defaultCenter] 
            addObserver:self
            selector:@selector(contentFooViewControllerDone:)
            name:@"contentFooViewControllerDone" 
            object:popoverController.contentViewController];



- (void)contentFooViewControllerDone:(NSNotification *)notification
{
    // Button in content view controller was tapped, dismiss popover...
    [self.popoverController dismissPopoverAnimated:YES];
}

- (void)dealloc 
{
    //stop listening for notifications and release popoverController...
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [popoverController release];
    [super dealloc];
}

- (IBAction)dismissButtonTapped
{
    [[NSNotificationCenter defaultCenter] 
        postNotificationName:@"contentFooViewControllerDone" object:self];
}
0 голосов
/ 09 февраля 2011

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

Подробнее о том, каксделать увольнение поповера с помощью кнопки внутри попвера, см. мой предыдущий ответ «Как настроить представления поповера для правильного увольнения» .

Основная идея:

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

Чтобы кнопка внутри контроллера представления контента говорила оригинальному контроллеру представления (который представил popover), чтобы отклонить popover, два возможных способаявляются делегатом + протокол или NSNotificationCenter.


В этом предыдущем ответе PresenterViewController является вашим корневым контроллером представления (тот, который представляет поповер).

Разница в вашем случаебудет в методе contentFooViewControllerDone (который вы бы поместили в свой контроллер корневого представления):

- (void)contentFooViewControllerDone:(NSNotification *)notification
{
    // Button in content view controller was tapped, dismiss popover...
    [self.popoverController dismissPopoverAnimated:YES];

    // Load new view here...
    // Note: If intending to use presentModalViewController 
    // (instead of addSubView), you might need to set animated to NO
    // for above popover dismissal (otherwise presentModal will do nothing) 
    // or use performSelector:withObject:afterDelay to present new 
    // view controller to animate both dismiss and present.
}
...