簡體   English   中英

知道何時使用手勢關閉拆分視圖控制器的主對象

[英]Know when split view controller's master is dismissed with a gesture

我正在iOS 7上實現一個主詳細信息應用程序,主視圖控制器是一個導航控制器,可以通過兩個表視圖控制器進行導航。 細節是顯示圖像的簡單視圖控制器。

我已經詳細實現了UISplitViewController方法:

- (BOOL) splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation
{
    return UIInterfaceOrientationIsPortrait(orientation);
}

- (void) splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc
{
    UINavigationController* nav= (UINavigationController*)aViewController;
    barButtonItem.title= nav.topViewController.title;
    self.navigationItem.leftBarButtonItem= barButtonItem;
}

- (void) splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
    self.navigationItem.leftBarButtonItem= nil;
}

問題是當用戶用手勢關閉主視圖控制器時,未調用splitViewController:willHideViewController:withBarButtonItem:forPopoverController:

這可以解決以下問題:如果用戶在母版的導航控制器中導航然后解散母版,則選項卡欄按鈕項將顯示舊標題。

為了更加清楚,我將逐步解釋發生的情況。 主導航控制器的根導航控制器的標題為“ Top Places”。 推送視圖控制器的標題為“照片”。 應用啟動時,沒有任何人像處於縱向模式:

在此處輸入圖片說明

用戶顯示“ Top Places”視圖控制器:

在此處輸入圖片說明

然后,用戶導航到第二個視圖控制器:“照片”:

在此處輸入圖片說明

然后,用戶關閉了母版,但選項卡欄按鈕項仍保留其舊標題“ Top Places”:

在此處輸入圖片說明

問題在於,當通過手勢關閉母版時,拆分視圖控制器委托沒有調用的方法。

根本沒有UISplitViewControllerDelegate委托方法來檢測縱向放置時彈出窗口何時被UISplitViewControllerDelegate 如何解雇無關緊要。 如果您想知道,請為彈出式控制器設置一個委托。

從橫向旋轉到縱向時,將調用splitViewController:willHideViewController:withBarButtonItem:forPopoverController:委托方法。

您無需知道何時關閉主視圖,只需根據導航控制器的當前topViewController的導航項標題設置按鈕的標題。 您可以通過將詳細信息控制器指定為導航控制器的代表來實現,

@interface DetailController ()
@property (strong,nonatomic) NSString *barButtonTitle;
@end

@implementation DetailController

- (void)viewDidLoad {
    [super viewDidLoad];
    [(UINavigationController *)self.splitViewController.viewControllers[0] setDelegate:self];
    self.splitViewController.delegate = self;
    self.navigationItem.leftBarButtonItem.title = [[(UINavigationController *)self.splitViewController.viewControllers[0] topViewController] navigationItem].title;
}


- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    self.barButtonTitle = viewController.navigationItem.title;
    self.navigationItem.leftBarButtonItem.title = self.barButtonTitle;
}



- (BOOL) splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation {
    return UIInterfaceOrientationIsPortrait(orientation);
}



- (void) splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc {
    barButtonItem.title= self.barButtonTitle;
    self.navigationItem.leftBarButtonItem= barButtonItem;
}



- (void) splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
    self.navigationItem.leftBarButtonItem= nil;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM