UISplitViewController 检测后退按钮按下

Mik*_*ker 5 uisplitviewcontroller swift ios8

我有一个 UISplitViewController,我想在其中始终显示 iPad 的主视图控制器和详细视图控制器。这条线为我解决了这个问题:

// Always display master and detail in large screens
self.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible
Run Code Online (Sandbox Code Playgroud)

在prepareForSegue中,当打开详细视图控制器时,我有以下后退按钮代码行

controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
controller.navigationItem.leftItemsSupplementBackButton = true
Run Code Online (Sandbox Code Playgroud)

现在,当用户按下后退按钮时,我想在隐藏主视图控制器后执行一个操作。我没有运气找到如何做到这一点。在 SplitViewControllerDelegate 中我尝试使用:

func splitViewController(svc: UISplitViewController, willChangeToDisplayMode displayMode: UISplitViewControllerDisplayMode)
Run Code Online (Sandbox Code Playgroud)

但该函数是在详细视图控制器变为全屏之前调用的。当 UISplitViewController 完成隐藏主视图时,是否有功能或其他功能可以帮助通知我?

Loe*_*gic 0

您可以在 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
  }
}
Run Code Online (Sandbox Code Playgroud)