UISplitViewController в портретной: как программно скрыть мастер поповер? - PullRequest
11 голосов
/ 19 апреля 2011

В моем UISplitViewController главный контроллер - UINavigationController. В портретном режиме я бы хотел, чтобы навигационный контроллер оставался видимым до тех пор, пока пользователь перемещается вверх (используя кнопку «назад»). Как только элемент из табличного представления контроллера навигации будет выбран, я хочу отклонить всплывающее окно. Как мне этого добиться? Как мой UITableViewController может узнать, находится ли он внутри поповера, и если да, отклонить себя?

Ответы [ 3 ]

20 голосов
/ 29 апреля 2011

Сделайте ваш контроллер основного вида UISplitViewControllerDelegate (если его еще нет) и подключите его к розетке UISplitViewController delegate.

Создайте переменную UIPopoverController в контроллере основного вида:

// MyViewController.h
@interface MyViewController : UIViewController <UISplitViewControllerDelegate> {
    UIPopoverController *popoverController;
}
@property (retain, nonatomic) UIPopoverController *popoverController;

// MyViewController.m
@synthesize popoverController;

Реализуйте следующие методы UISplitViewControllerDelegate:

// Called when rotating to portrait
- (void)splitViewController:(UISplitViewController*)svc
     willHideViewController:(UIViewController *)aViewController
          withBarButtonItem:(UIBarButtonItem*)barButtonItem
       forPopoverController:(UIPopoverController*)pc {

    // Popover controller is visible in portrait
    self.popoverController = pc;
}

// Called when rotating to landscape
- (void)splitViewController:(UISplitViewController*)svc
     willShowViewController:(UIViewController *)aViewController
  invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {

    // No popover controller in landscape view
    self.popoverController = nil;
}

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

- (void)navigationControllerSelectedItem:(id)item {
    // If a popover controller is visible, hide it
    if (popoverController) {
        [popoverController dismissPopoverAnimated:YES];
    }
}

И не забудьте освободить эту переменную:

- (void)dealloc {
    self.popoverController = nil;
    [super dealloc];
}

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

0 голосов
/ 03 июня 2013

Встроенный шаблон IOS 6.0 SplitView. Подробный вид отслеживает ориентацию и всплывающее окно MasterViewController.

Просто установите detailItem, и поповер исчезнет, ​​если необходимо. Существует даже проверка, используете ли вы один и тот же detaiItem, поэтому настройка страницы и работа по обновлению не выполняются.

self.detailViewController.detailItem = self.detailViewController.detailItem;
0 голосов
/ 16 февраля 2012

Стандартный пример iPad для SplitViewController в iOS5 делает примерно то же самое, что и подробный ответ, но popoverController называется masterPopoverController.

И создание свойства iOS5 style как _popoverController не работает, потому что там уже есть ивар с таким именем в UIViewController.h.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...