• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - Swift 中的复杂导航栈

[复制链接]
菜鸟教程小白 发表于 2022-12-11 20:00:09 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个复杂的导航问题,我希望有人能给我一些关于解决这个问题的最佳方法的见解。我一直在谷歌上搜索,发现了针对类似问题的多种不同建议,但似乎没有一个能完全确定我的问题。

我有一个 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!)
}

不过,我对此并不满意。我愿意:

  1. 不必在每次点击段时重新实例化每个 Controller 。
  2. 能够为它制作 Storyboard(如果没有实际的 UISegmentedControlController 或类似的东西,可能无法实现)



Best Answer-推荐答案


我实际上找到了解决问题的正确方法。我必须编写一个自定义系统。我将在某个时候回到这个问题上并继续努力,以便我可以提供一个带有 API 的 github 项目,该 API 可以公开向任何人提供此功能。

基本上,系统会这样做:

  • 可滚动分段控件,可根据需要扩展到任意多个分段。
  • 一个“SegmentNavigationController”,它是一个 UIViewController,因为它包含在点击相应的段时交换到、置于前面、显示和隐藏的 View 。
    • 每个段都有自己的导航堆栈,它只是一个 View Controller 数组,用于控制当前段中的 View 。
    • 自定义动画在向/从导航堆栈推送和弹出项目时发生,使其看起来像一个自然的 iOS Controller 。分段控件保持原位,而新 View 动画化。
    • 保留导航,以便在分段之间切换时,您可以在点击不同分段时从中断处继续。
  • 利用 Clean Swift 架构:http://clean-swift.com

我将其发布为答案,因为经过几天的审议,自定义系统是最佳解决方案

当然,这也是可能将此系统扩展到有用和可重用的东西的初步。

关于ios - Swift 中的复杂导航栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44835176/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap