2015-04-07 5 views
1

У меня есть UISplitViewController, где я хочу всегда отображать главные и подробные контроллеры представлений для iPads. Эта линия заботится о том, что для меня:UISplitViewController обнаружение Задняя кнопка нажата

// Always display master and detail in large screens 
self.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible 

В prepareForSegue, при открытии контроллеров просматривать детали, у меня есть следующие строки кода для кнопки Назад

controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem() 
controller.navigationItem.leftItemsSupplementBackButton = true 

Теперь, когда пользователь нажмите эту кнопку назад, я хочу выполнить действие после того, как скрыт главный контроллер. Мне не повезло найти, как это сделать. В SplitViewControllerDelegate я пытался использовать:

func splitViewController(svc: UISplitViewController, willChangeToDisplayMode displayMode: UISplitViewControllerDisplayMode) 

Но эта функция вызывается до контроллера Детальный вид становится весь экран. Есть ли функция или что-то еще, что я могу сделать, чтобы уведомить меня, когда UISplitViewController заканчивает скрывать главный вид?

+0

насчет сдачи его в 'viewDidDisappear' для контроллера мастера зрения? – aganders3

+0

Я положил инструкции println в viewDidDisappear, viewWillDisappear, viewWillAppear, и они не вызывается, когда я показываю и скрываю контроллер главного представления. –

+0

@MikeWalker вам повезло? – Steve

ответ

0

Вы можете добавить наблюдатель на вид с в DetailViewController и выполнять ваши конкретные действия при срабатывании:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self addObserver:self forKeyPath:@"view.frame" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionInitial context:nil]; 
} 

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    if ([self observationInfo]) { 
    @try { 
     [self removeObserver:self forKeyPath:@"view.frame"]; 
    } 
    @catch (NSException *exception) {} 

    } 
} 

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    if (object == self && [keyPath isEqualToString:@"view.frame"]) { 
    // do your action here 
    } 
} 
Смежные вопросы