我想在我的应用中添加一些UIKeyCommands
。我的应用程序由一个UISplitViewController
组成,强制主人在iPad全屏显示。在较小的屏幕上,它像通常那样工作。
现在,我已在UIKeyCommands
中实施了一些MasterViewController
,在DetailViewController
中实施了一些DetailViewController
。但是,该应用只会显示RootSplitViewController
中的内容。所以我将所有这些内容都放在了MasterViewController
中,但即使在iOS 9的分割视图中隐藏了MasterViewController
,也会显示所有这些内容。
我想要的是,当应用程序在iPad上全屏显示时,它会显示所有内容,因此DetailViewController
会与MasterViewController
一起强制显示在屏幕上。当视图很小(即50-50)并隐藏* * * * * /bin/php /var/www/html/hello.php
时,我希望它只显示屏幕上的窗口。
关于如何实现这一目标的任何想法?
答案 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方法,但它有效。如果有人知道更好的方法,我很乐意听取您的意见。