gpt4 book ai didi

ios - 在处理关系 Segue 时,iOS 8 的 "Storyboard Reference"的替代方案?

转载 作者:可可西里 更新时间:2023-11-01 02:18:17 26 4
gpt4 key购买 nike

我的应用程序有一个包含 4 个选项卡的 TabBarViewController。其中一个选项卡是“设置”,我想将其移至单独的 Storyboard。如果我只考虑 iOS 9 及更高版本作为我的部署目标,那么我可以使用 Storyboard Reference 重构 SettingsTab。但是我也想针对 iOS 8。由于 Storyboard Reference 不支持 Relationship Segue,因此在这种情况下我不能依赖它。

所以在包含 TabBarViewController 的主 Storyboard 中,我保留了一个虚拟的 SettingsTabViewController 作为空占位符。在其类文件中的函数 "viewWillAppear" 中,我将 View 推送到 Settings.storyboard 中的真实 SettingsTabViewController。这很好用。但问题是,如果我继续点击“设置”选项卡,空的占位符 View Controller 将显示一小段时间,然后返回到真正的“设置” View 。

我试图实现这个委托(delegate)来锁定“设置”选项卡:

func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {

return viewController != tabBarController.selectedViewController

}

但是,在我实现这个委托(delegate)之后,其他三个选项卡也被锁定了。

是否可以只锁定“设置”选项卡而不锁定其他三个选项卡?我到底应该在哪个 View Controller 中实现这个委托(delegate)?

最佳答案

是的,这是可能的。您需要检查索引;使用以下代码,您不仅可以防止锁定其他选项卡,而且您仍然具有 tap on tab goto root view controller 功能。

func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {
let tappedTabIndex = viewControllers?.indexOf(viewController)
let settingsTabIndex = 3 //change the index
if tappedTabIndex == settingsTabIndex && selectedIndex == settingsTabIndex {
guard let navVC = viewController as? UINavigationController else { return true }
guard navVC.viewControllers.count > 1 else { return true }

let firstRealVC = navVC.viewControllers[1]
navVC.popToViewController(firstRealVC, animated: true)
return false
}
return true
}

.

这回答了你的问题,但你仍然会看到 settingsVC 片刻。为避免这种情况,您只需在插入动画时关闭动画即可。因此您需要按以下方式覆盖 viewWillAppear

override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)

if let theVC = storyboard?.instantiateViewControllerWithIdentifier("theVC") {
navigationController?.pushViewController(theVC, animated: false)
}
}

添加以上代码后,您仍然会在真正的第一个 viewController 中看到一个后退按钮。你可以隐藏它:

override func viewDidLoad() {
super.viewDidLoad()
navigationItem.hidesBackButton = true
}

关于ios - 在处理关系 Segue 时,iOS 8 的 "Storyboard Reference"的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34378120/

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