jch*_*nxu 7 uisplitviewcontroller ios
在UISplitViewController折叠显示中,如何以编程方式返回主视图控制器?
我用谷歌搜索但没有找到解决办法.不确定我是否使用了正确的关键字.这是我显示详细视图控制器的方式:
[self showDetailViewController:[[UINavigationController alloc] initWithRootViewController:detail] sender:self];
Run Code Online (Sandbox Code Playgroud)
我也分别尝试了这3种方法,但没有一种方法有效:
if (self.splitViewController.collapsed) {
UIBarButtonItem *backButtonItem = self.navigationItem.leftBarButtonItem;
(1):[backButtonItem.target performSelector:backButtonItem.action];
(2):[[UIApplication sharedApplication] sendAction:backButtonItem.action to:backButtonItem.target from:nil forEvent:nil];
(3):objc_msgSend(backButtonItem.target, backButtonItem.action);
}
Run Code Online (Sandbox Code Playgroud)
导航项目设置如同详细信息VC viewDidLoad:
self.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem;
self.navigationItem.leftItemsSupplementBackButton = YES;
Run Code Online (Sandbox Code Playgroud)
好吧,我找到了一个似乎有效的解决方案。我已经在 iPhone 6 和 iPhone 6 Plus 上测试过它,但我在三十分钟前才发现它,所以它可能会产生一些我还没有遇到的不幸的副作用。
速度很快。我希望它是清楚的。如果您需要我用 Objective-C 提供它,请告诉我。
if let splitViewController = splitViewController {
if splitViewController.collapsed {
let viewControllers = splitViewController.viewControllers
for controller in viewControllers {
// PrimaryNavigationController is the navigation controller I use
// as the split views master view, which is also set as its delegate
// but it could be any UINavigationController that is the
// primary controller of the split view
if controller.isKindOfClass(PrimaryNavigationController) {
controller.popViewControllerAnimated(true)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我想关闭它时,我会从详细视图中调用它。
该代码的工作原理是检查分割视图控制器是否折叠,这是弹出详细视图有意义的唯一状态(无论如何对我来说)。然后它只是在分割视图控制器中查找当前正在运行的导航控制器,并要求它弹出它的顶部视图控制器。这是有效的,因为在折叠模式下,分割视图主视图是堆栈中唯一的视图控制器。详细视图被折叠到“其中”,因此成为它的当前顶视图控制器,因此是弹出的视图控制器。
似乎有效。让我知道它是否也适合你。
| 归档时间: |
|
| 查看次数: |
5334 次 |
| 最近记录: |