UISplitViewController 检测到按下后退按钮
Posted
技术标签:
【中文标题】UISplitViewController 检测到按下后退按钮【英文标题】:UISplitViewController detecting Back Button pressed 【发布时间】:2015-04-07 15:43:29 【问题描述】:我有一个 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)
但该函数在细节视图控制器变为全屏之前被调用。当 UISplitViewController 完成隐藏主视图时,我可以做些什么来帮助通知我?
【问题讨论】:
把它放在主视图控制器的viewDidDisappear
中怎么样?
我将 println 语句放在 viewDidDisappear、viewWillDisappear、viewWillAppear 中,当我显示和隐藏主视图控制器时它们不会被调用。
@MikeWalker 你有什么幸运吗?
@Steve 不幸的是,我没有运气。
你找到解决办法了吗?
【参考方案1】:
您可以在 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
【讨论】:
【参考方案2】:你可以试试delegate
方法
- (UISplitViewControllerDisplayMode)targetDisplayModeForActionInSplitViewController:(UISplitViewController *)svc;
【讨论】:
以上是关于UISplitViewController 检测到按下后退按钮的主要内容,如果未能解决你的问题,请参考以下文章
从 UINavigationController 切换到 UISplitviewController
uisplitviewcontroller:将选定的行从主传递到细节
如何防止我的 UISplitViewController 在旋转到纵向时显示主 VC?