我有一个UISplitViewController,我希望始终显示iPad的主视图控制器和详细视图控制器。这条线为我解决了这个问题:
// Always display master and detail in large screens
self.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible
在prepareForSegue中,当打开详细视图控制器时,我有以下后退按钮的代码行
controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
controller.navigationItem.leftItemsSupplementBackButton = true
现在,当用户按下该后退按钮时,我将希望在隐藏主视图控制器后执行操作。我没有找到如何做到这一点的运气。在SplitViewControllerDelegate中,我尝试使用:
func splitViewController(svc: UISplitViewController, willChangeToDisplayMode displayMode: UISplitViewControllerDisplayMode)
但是在Detail视图控制器变为全屏之前调用该函数。当UISplitViewController完成隐藏主视图时,是否有我可以做的功能或其他帮助通知我?
您可以在DetailViewController中的视图上添加观察者,并在触发时执行特定操作:
- (void)viewDidLoad {
[super viewDidLoad];
[self addObserver:self forKeyPath:@"view.frame" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionInitial context:nil];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if ([self observationInfo]) {
@try {
[self removeObserver:self forKeyPath:@"view.frame"];
}
@catch (NSException *exception) {}
}
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if (object == self && [keyPath isEqualToString:@"view.frame"]) {
// do your action here
}
}
你可以试试delegate
方法
- (UISplitViewControllerDisplayMode)targetDisplayModeForActionInSplitViewController:(UISplitViewController *)svc;