UISplitviewController 和不同的 UIKeyCommands 取决于主、细节或两者都在屏幕上
Posted
技术标签:
【中文标题】UISplitviewController 和不同的 UIKeyCommands 取决于主、细节或两者都在屏幕上【英文标题】:UISplitviewController and different UIKeyCommands depending on master, detail or both being on screen 【发布时间】:2016-07-24 14:39:22 【问题描述】:我想在我的应用程序中包含一些UIKeyCommands
。我的应用程序包含一个UISplitViewController
,它强制主程序始终在 iPad 全屏上可见。在较小的屏幕上,它可以正常工作。
现在,我在MasterViewController
中实现了一些UIKeyCommands
,在DetailViewController
中实现了一些。但是,该应用程序只会显示DetailViewController
中的那些。所以我将它们全部放在RootSplitViewController
中,但这会显示所有这些,即使MasterViewController
隐藏在ios 9 的拆分视图中。
我想要的是,当应用程序在 iPad 上全屏显示时,它会显示所有内容,因此 MasterViewController
与 DetailViewController
一起被强制显示在屏幕上。当视图很小(即 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];
为了使其正常工作,我在UISplitViewController
中添加了BOOL
。
@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 方法,但它确实有效。如果有人知道更好的方法,我很想听听您的反馈。
【讨论】:
以上是关于UISplitviewController 和不同的 UIKeyCommands 取决于主、细节或两者都在屏幕上的主要内容,如果未能解决你的问题,请参考以下文章
将 UIToolBar 放在 UISplitViewController 上方?
在 UIViewControllers 和 UISplitViewController 之间导航 [关闭]
iPad 上的 UITraitCollection 和 UISplitViewController