UISplitViewController检测到后退按钮被按下

问题描述 投票:3回答:2

我有一个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完成隐藏主视图时,是否有我可以做的功能或其他帮助通知我?

swift ios8 uisplitviewcontroller
2个回答
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
  }
}

0
投票

你可以试试delegate方法

- (UISplitViewControllerDisplayMode)targetDisplayModeForActionInSplitViewController:(UISplitViewController *)svc;
© www.soinside.com 2019 - 2024. All rights reserved.