我遇到了一个复杂的导航问题,希望有人可以让我对解决此问题的最佳方法有所了解。我一直在使用Google搜索,发现了针对类似问题的多种不同建议,但似乎都没有一个能解决我的问题。
我有一个UITabBarController。每个选项卡均应具有自己的导航堆栈。
这些选项卡之一使用带有三个段的UISegmentedControl。这些段中的每一个都需要具有自己的视图控制器和导航堆栈,彼此独立并且与选项卡栏控制器为其选项卡控制的导航堆栈无关。基本上,它需要像UITabBarController的选项卡中的UITabBarController一样工作,但是将这些选项卡显示为UISegmentedControl。
同样,当在每个选项卡的根控制器处时,导航堆栈应该是其来源所在的堆栈,以便将其弹出到其来源所在的表视图中。
我遇到了麻烦,无论我如何尝试,都觉得我必须要有一些残酷的技巧才能继续前进。任何帮助都将不胜感激。
我强烈希望能够处理情节提要中的连接,以使我的情节提要保持美观,但如果必须在代码中完成,我也可以这样做。
编辑
我有解决办法。在基类中:
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!)
}
我对此并不满意。我想:
最佳答案
我实际上找到了解决该问题的正确方法。我必须编写一个自定义系统。我将回到这一点并在某个时候进行研究,以便我可以为GitHub项目提供API,该API可以向所有人公开提供此功能。
基本上,系统执行此操作:
我将其发布为答案,因为经过数天的讨论,定制系统是最佳解决方案。
当然,这也是可能将该系统扩展到有用和可重用的基础。
关于ios - Swift中的复杂导航堆栈,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44835176/