我有一个复杂的导航问题,我希望有人能给我一些关于解决这个问题的最佳方法的见解。我一直在谷歌上搜索,发现了针对类似问题的多种不同建议,但似乎没有一个能完全确定我的问题。
我有一个 UITabBarController。每个选项卡都设置了它自己的导航堆栈,这是应该的。
其中一个选项卡使用具有三个段的 UISegmentedControl。这些段中的每一个都需要有自己的 View Controller 和导航堆栈,彼此独立,并且独立于选项卡栏 Controller 为其选项卡控制的导航堆栈。基本上,它需要像 UITabBarController 的选项卡中的 UITabBarController 一样工作,但将选项卡显示为 UISegmentedControl。
另外,当在每个选项卡的根 Controller 时,导航堆栈应该是它进来的堆栈,以便它弹出到它进来的 TableView 。
我遇到了障碍,觉得无论我尝试什么,我都必须进行一些残酷的破解才能继续前进。任何和所有的帮助将不胜感激。
我非常希望能够在 Storyboard 中处理连接,以使我的 Storyboard 保持美观,但如果必须在代码中完成,我也可以这样做。
我有一个解决办法。在基类中:
private func show(segment: SelectedSegment) {
var equipmentStoryboard: UIStoryboard!
switch segment {
case .SelEquipment:
equipmentStoryboard = UIStoryboard(name: "EquipmentDetailEquipmentSegment", bundle: nil)
case .SelHistory:
equipmentStoryboard = UIStoryboard(name: "EquipmentDetailHistorySegment", bundle: nil)
case .SelPlans:
equipmentStoryboard = UIStoryboard(name: "EquipmentDetailPlansSegment", bundle: nil)
}
if let newSegmentController = equipmentStoryboard.instantiateViewController(withIdentifier: segment.getSegmentIdentifier()) as? EquipmentDetailSegmentsViewController {
var controllerStack = self.navigationController?.viewControllers
controllerStack?.removeLast()
controllerStack?.append(newSegmentController)
self.navigationController?.setViewControllers(controllerStack!, animated: false)
}
}
@IBAction func didTapSegmentedControl(_ sender: UISegmentedControl, forEvent event: UIEvent) {
let newSelectedSegment = SelectedSegment(rawValue: sender.selectedSegmentIndex)
self.show(segment: newSelectedSegment!)
}
不过,我对此并不满意。我愿意:
我实际上找到了解决问题的正确方法。我必须编写一个自定义系统。我将在某个时候回到这个问题上并继续努力,以便我可以提供一个带有 API 的 github 项目,该 API 可以公开向任何人提供此功能。
基本上,系统会这样做:
我将其发布为答案,因为经过几天的审议,自定义系统是最佳解决方案。
当然,这也是可能将此系统扩展到有用和可重用的东西的初步。
关于ios - Swift 中的复杂导航栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44835176/
欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://jike.in/) | Powered by Discuz! X3.4 |