UISplitviewController和不同的UIKeyCommands取决于主屏幕,细节或两者在屏幕上

时间:2016-07-24 14:39:23

标签: ios ipad uisplitviewcontroller uikeycommand

我想在我的应用中添加一些UIKeyCommands。我的应用程序由一个UISplitViewController组成,强制主人在iPad全屏显示。在较小的屏幕上,它像通常那样工作。

现在,我已在UIKeyCommands中实施了一些MasterViewController,在DetailViewController中实施了一些DetailViewController。但是,该应用只会显示RootSplitViewController中的内容。所以我将所有这些内容都放在了MasterViewController中,但即使在iOS 9的分割视图中隐藏了MasterViewController,也会显示所有这些内容。

我想要的是,当应用程序在iPad上全屏显示时,它会显示所有内容,因此DetailViewController会与MasterViewController一起强制显示在屏幕上。当视图很小(即50-50)并隐藏* * * * * /bin/php /var/www/html/hello.php时,我希望它只显示屏幕上的窗口。

关于如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分: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];
}

为了实现这一点,我向BOOL添加了UISplitViewController

@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;
}

我知道这可能不是pretties方法,但它有效。如果有人知道更好的方法,我很乐意听取您的意见。