Swift 4 - 如何覆盖标签栏将打开视图控制器
Posted
技术标签:
【中文标题】Swift 4 - 如何覆盖标签栏将打开视图控制器【英文标题】:Swift 4 - How to override tab bar will open view controller 【发布时间】:2019-01-10 23:11:02 【问题描述】:是否有可能当用户点击一个标签栏项目时,我可以在 UITabBarController
中覆盖它,然后我检查 UserDefault
,然后决定我是显示视图还是 return
并且他们留下他们目前的看法?
应该是这样的:
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem)
if item.image == UIImage(named: "TabProfile")
// Profile tab selected
if !loginController.isUserLogged()
// Not logged in...
showLoginView()
// Following line doesn't work...
tabBarController?.selectedIndex = selectedIndex
如果可能,我想执行此检查,如果 false
则实际上阻止视图到达 viewDidLoad
。
谢谢。
【问题讨论】:
在用户登录之前完全避免添加标签不是更好吗?或者至少在用户登录之前禁用标签栏项目? @rmaddy 我想过这个,但我希望用户能够浏览所有内容而无需创建帐户。 您的整个问题是询问如何有条件地阻止用户选择选项卡。也许我在评论中提出了错误的条件,但它仍然存在。在满足条件之前不要添加(或只是禁用)选项卡。 在这种情况下,访客用户和个人资料标签栏项目之间的交互显示登录弹出窗口。这是所需的功能。也许我的问题措辞错误并且没有给出足够的上下文。还是谢谢你 【参考方案1】:我猜你需要
func tabBarController(_ tabBarController: UITabBarController,
shouldSelect viewController: UIViewController) -> Bool
if let ind = tabBarController.viewControllers!.index(of:viewController) , ind == 2 // suppose profile is 2
//
if userNotLogged
// present modal login view
return false
return true
【讨论】:
以上是关于Swift 4 - 如何覆盖标签栏将打开视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
swift 4 中使用 performSegue 打开的关闭页面时,如何在视图控制器和 TableViewController 之间传递数据?
当使用在swift 4中使用performSegue打开的dismiss页面时,如何在视图控制器和TableViewController之间传递数据?