[英]How to get notified when a presented view controller is dismissed with a gesture?
[英]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.