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?

UISplitViewController 从任何地方平移到主视图

故事板、UIViewController 和 UISplitViewController