2016-07-24 29 views
1

我想在我的應用中包含一些UIKeyCommands。我的應用程序包含一個UISplitViewController,強制主人始終在iPad上全屏顯示。在較小的屏幕上,它像通常那樣工作。UISplitviewController和不同的UIKeyCommands,取決於屏幕上的主,細節或兩者都在屏幕上

現在,我在MasterViewController中實施了一些UIKeyCommands,並且在DetailViewController中實施了一些UIKeyCommands。但是,該應用只會顯示DetailViewController中的那些應用。所以我把它們都放在了RootSplitViewController中,但是它們會顯示所有這些,即使隱藏在iOS 9的拆分視圖中。

但是我想要的是當它顯示應用程序在iPad上全屏時的所有內容,因此MasterViewControllerDetailViewController一起被強制在屏幕上。當視圖很小(即50-50)並且隱藏了MasterViewController時,我希望它只顯示屏幕上的窗口。

有關如何實現此目的的任何想法?

回答

1

最後,我設法做到了這一點 - 儘管方式不太好。

UIKeyCommands被添加到RootSplitViewController

- (NSArray *)keyCommands { 
    if (self.view.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular) { 
     return @[ 
        [UIKeyCommand keyCommandWithInput:@"r" modifierFlags:UIKeyModifierCommand action:@selector(changeRestaurant:) discoverabilityTitle:@"Change restaurant"], 
        [UIKeyCommand keyCommandWithInput:@"t" modifierFlags:UIKeyModifierCommand action:@selector(changeTable:) discoverabilityTitle:@"Change table"] 
       ]; 
    } else { 
     if (self.masterIsVisible == YES) { 
      return @[ 
         [UIKeyCommand keyCommandWithInput:@"t" modifierFlags:UIKeyModifierCommand action:@selector(changeRestaurant:) discoverabilityTitle:@"Change restaurant"] 
        ]; 
     } else { 
      return @[ 
         [UIKeyCommand keyCommandWithInput:@"t" modifierFlags:UIKeyModifierCommand action:@selector(changeTable:) discoverabilityTitle:@"Change table"] 
        ]; 
     } 
    } 
} 

這些方法調用特定的UIViewController實際的方法。

- (void)changeRestaurant:(id)sender { 
    UINavigationController *nav = (UINavigationController *)[self.viewControllers objectAtIndex:0]; 
    RestaurantController *master = [nav.viewControllers objectAtIndex:0]; 
    [master changeRestaurant]; 
} 

- (void)changeTable:(id)sender { 
    UINavigationController *nav = (UINavigationController *)[self.viewControllers objectAtIndex:1]; 
    TableController *detail = [nav.viewControllers objectAtIndex:0]; 
    [detail changeTable:sender]; 
} 

爲了這個工作我添加了一個BOOLUISplitViewController

@interface RootSplitViewController : UISplitViewController 

@property (nonatomic) BOOL masterIsVisible; 

@end 

然後在MasterViewController中調用。

- (void)viewDidDisappear:(BOOL)animated { 
    RootSplitViewController *rootView = (RootSplitViewController *)self.splitViewController; 
    rootView.masterIsVisible = NO; 
} 

- (void)viewDidAppear:(BOOL)animated { 
    RootSplitViewController *rootView = (RootSplitViewController *)self.splitViewController; 
    rootView.masterIsVisible = YES; 
} 

我知道這可能不是漂亮的方法,但它的工作原理。如果有人知道更好的方法來做到這一點,我很樂意聽取您的意見。