gpt4 book ai didi

ios - UiSplitViewController 的主人里面的 UITabBarController

转载 作者:技术小花猫 更新时间:2023-10-29 11:24:19 38 4
gpt4 key购买 nike

我想实现与 Facebook Messenger 应用程序相同的流程,在主视图中使用标签栏 Controller 。参见 enter image description here

我完全按照这个答案中的描述做了 Create a TabBar Controller with a Master-detail template?

但是!它不能在 iPhone 上正常工作,只能在 iPad 上工作。在 iPhone 上,向后导航不起作用。详细信息 Pane 就像一个模态序列一样打开,不可能向后移动。这里可能是什么错误?这甚至可以通过标准的 uisplitviewcontroller 实现吗?我也尝试在 tabbarcontroller 中嵌入 navigationcontroller(在主视图中将 navigationcontroller 设置为 root),然后它适用于 iPhone 但不适用于 iPad。

最佳答案

我最终通过不使用 UITabBarController 来解决这个问题,而是创建了一个继承自 UIViewController 的 CustomTabBarController。自定义 Controller 在其 View 底部有一个 UITabBar,并且在容器 View 中嵌入了多个其他 UIViewController。自定义 Controller 将所有嵌入式 View Controller 的 isHidden 属性设置为 true 与所选选项卡对应的 View Controller 除外。 p>

下面是一个简单的例子,有两个选项卡,由它们的标签标识:

class CustomTabBarController: UIViewController, UITabBarDelegate {

@IBOutlet weak var tab1View: UIView!
@IBOutlet weak var tab2View: UIView!
@IBOutlet weak var tabBar: UITabBar!

override func viewDidLoad() {
tabBar.delegate = self
}

func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
tab1View.isHidden = item.tag != 1
tab2View.isHidden = item.tag != 2
}
}

这个自定义 Controller 应该设置为 UINavigationController 的根,它本身应该设置为 Split View Controller 的主 Controller :

Storyboard showing custom tab bar controller in a split view controller

此设置适用于 iPad 和 iPhone:

iPhone screenshot showing split view in combined mode iPad screenshot showing split view in split mode

此方法一些缺点:

  • 自定义选项卡 Controller 不太容易使用 - 添加新选项卡需要您添加另一个嵌入式 View 并将其连接到 Controller 中的 socket 。

  • 设置导航项的标题和左右栏按钮项必须在选项卡选择时在自定义选项卡栏 Controller 中完成。

  • 此方法使用(我认为)比常规 UITabBarController 更多的内存,因为所有 subview Controller 在应用加载时立即加载,而不是在它们首次显示时加载.

  • 此设置将导致在(纵向)iPhone 模式下显示细节时隐藏标签栏。这是想要的,也是 Facebook Messenger 应用程序中的行为,但如果您希望标签栏永久可见,则此方法无法实现。

    <

关于ios - UiSplitViewController 的主人里面的 UITabBarController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33668952/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com