我有一个复杂的导航问题,我希望有人可以给我一些洞察力来解决这个问题的最佳方法。我一直在使用谷歌搜索,并针对类似的问题找到了多种不同的建议,但似乎没有一个能够解决我的问题。
我有一个UITabBarController。每个选项卡都设置有自己的导航堆栈,就像应该拥有的一样。
其中一个标签使用带有三个段的UISegmentedControl。这些段中的每一个都需要具有自己的视图控制器和导航堆栈,彼此独立以及选项卡栏控制器为其选项卡控制的导航堆栈。基本上,它需要在UITabBarController的选项卡中像UITabBarController一样工作,但是将选项卡显示为UISegmentedControl。
此外,当在每个选项卡的根控制器上时,导航堆栈应该是它所来自的堆栈,以便它弹出到它所来自的表视图。
我遇到了障碍,无论我尝试什么,我都觉得我必须要有一些残酷的黑客才能继续前进。任何和所有帮助将不胜感激。
我非常希望能够处理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!)
}
但是,我对此并不满意。我想:
答案 0 :(得分:0)
我实际上找到了解决问题的正确方法。我不得不写一个自定义系统。我将回到此处并在某个时刻开展工作,以便我可以提供一个带有API的github项目,该项目将公开提供给任何人。
基本上,系统会这样做:
我将此作为答案发布,因为自定义系统是最佳解决方案经过数天的审议后才会讨论。
这当然也是可能将这个系统扩展到有用和可重用的东西的初步。