bor*_*ero 8 uinavigationcontroller uisplitviewcontroller ios9 swift2
我的UISplitViewController基本上就像一个魅力,除了在第一次(仅第一次!)从主表视图转换到详细视图时显示一个恼人的错误消息.
Unbalanced calls to begin/end appearance transitions for <UINavigationController: 0x160015600>.
Run Code Online (Sandbox Code Playgroud)
主视图和详细视图控制器都嵌入在一个UINavigationController.但是,只有在设置以下内容时才会出现错误(这是iPhone上逻辑行为所必需的):
class MySplitViewController: UISplitViewController, UISplitViewControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
}
func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool {
return true
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人能提供这个问题的解决方案,那将是非常好的,在此先感谢.
BTW:拆分视图控制器已在故事板中设置
呈现详细视图控制器的tableView:didSelectRowAtIndexPath:方法如下:
if let detailViewController = delegate as? DetailViewController {
detailViewController.navigationItem.leftItemsSupplementBackButton = true
detailViewController.navigationItem.leftBarButtonItem = splitViewController!.displayModeButtonItem()
splitViewController!.showDetailViewController(detailViewController.navigationController!, sender: self)
}
Run Code Online (Sandbox Code Playgroud)
UITableView最有可能的是,您的第一次从主视图(在UIViewController?)到详细UIViewController视图()的转换是UISplitViewController在活动/当前视图完成显示之前开始的。
可能的原因是您可能试图以viewDidLoad()您掌握的方法呈现详细视图的第一个“实例” UIViewController?在这种情况下,您的应用程序可能会尝试在主视图完成显示之前呈现详细视图。请注意视图确实加载视图和视图确实出现之间的区别:
覆盖函数 viewDidLoad()
描述:
在控制器的视图加载到内存后调用。
该方法在视图控制器将其视图层次结构加载到内存后被调用。
覆盖 func viewDidAppear(动画:Bool)
描述:
通知视图控制器其视图已添加到视图层次结构中。您可以重写此方法来执行与呈现视图相关的其他任务。
现在,由于您的问题没有显示如何加载初始详细视图,因此您自己可能已经注意到以下建议,但无论如何:如果您的详细视图是从 中呈现的viewDidLoad(),请尝试将其移至该viewDidAppear()方法:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(true)
// present/load detail view here instead
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
884 次 |
| 最近记录: |