2016-07-24 44 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; 
} 

我知道这可能不是漂亮的方法,但它的工作原理。如果有人知道更好的方法来做到这一点,我很乐意听取您的意见。