2015-04-07 100 views
1

我有一個UISplitViewController,我總是要顯示iPad的主視圖和詳細視圖控制器。這條線需要照顧,對我說: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 
    } 
}