我的UISplitViewController
基本上像魅力一样,只是在第一次(仅第一次!)从主表视图转换到详细视图时显示一条恼人的错误消息。
Unbalanced calls to begin/end appearance transitions for <UINavigationController: 0x160015600>.
主视图和详细视图控制器都嵌入在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
}
}
如果有人能提供这个问题的解决方案,那将是很好的,在此先感谢。
BTW:拆分视图控制器已在故事板中设置
呈现详细视图控制器是在tableView:didSelectRowAtIndexPath:
方法中完成的,如下所示:
if let detailViewController = delegate as? DetailViewController {
detailViewController.navigationItem.leftItemsSupplementBackButton = true
detailViewController.navigationItem.leftBarButtonItem = splitViewController!.displayModeButtonItem()
splitViewController!.showDetailViewController(detailViewController.navigationController!, sender: self)
}
答案 0 :(得分:2)
最有可能的是,您在UITableView
中从主人(UIViewController
中的UIViewController
)到详细(UISplitViewController
)视图的第一次转换是在活动/当前视图之前启动的完成展示自己。
可能的原因是您可能尝试在主人viewDidLoad()
的{{1}}方法中显示详细信息视图的第一个“实例”?在这种情况下,您的应用可能会尝试在主视图完成显示之前显示详细视图 。请注意视图加载视图和视图确实显示之间的区别:
覆盖func viewDidLoad()
说明强>
在控制器的视图加载到内存后调用。
在视图控制器加载其视图后调用此方法 层次结构到内存。
覆盖func viewDidAppear(动画:Bool)
说明强>
通知视图控制器其视图已添加到视图中 层次结构。您可以覆盖此方法以执行其他任务 与呈现视图相关联。
现在,由于您的问题未显示如何加载初始详细信息视图,因此您可能已经注意到以下建议,但无论如何:如果您的详细信息视图来自UIViewController
,请尝试移动这是viewDidLoad()
方法:
viewDidAppear()
答案 1 :(得分:0)
这可能为时已晚,但无论如何,我使用perform segue而不是showDetailViewController来解决这个问题