问题描述
final class TabBarViewController: UITabBarController {
// MARK: - Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
self.tabBar.backgroundColor = .systemBackground
self.tabBar.layer.masksToBounds = true
self.tabBar.layer.cornerRadius = 25
self.tabBar.layer.maskedCorners = [.layerMinXMinYCorner,.layerMaxXMinYCorner]
self.tabBar.unselectedItemTintColor = .tertiaryLabel
self.tabBar.tintColor = .label
setUpControllers()
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
tabBar.frame = CGRect(x: 0,y: view.bottom - tabBar.height,width: tabBar.width,height: tabBar.height+10)
}
private func setUpControllers() {
guard let email = UserDefaults.standard.string(forKey: "email"),let username = UserDefaults.standard.string(forKey: "username") else {
return
}
let currentUser = User(
username: username,email: email
)
let home = HomeViewController()
let explore = ExploreViewController()
let editor = EditorViewController()
let activity = NotificationsViewController()
let profile = ProfileViewController(user: currentUser)
let nav1 = UINavigationController(rootViewController: home)
let nav2 = UINavigationController(rootViewController: explore)
let nav3 = UINavigationController(rootViewController: editor)
let nav4 = UINavigationController(rootViewController: activity)
let nav5 = UINavigationController(rootViewController: profile)
nav1.navigationBar.tintColor = .label
nav2.navigationBar.tintColor = .label
nav3.navigationBar.tintColor = .label
nav4.navigationBar.tintColor = .label
nav5.navigationBar.tintColor = .label
if #available(iOS 14.0,*) {
home.navigationItem.backButtondisplayMode = .minimal
explore.navigationItem.backButtondisplayMode = .minimal
explore.navigationItem.backButtondisplayMode = .minimal
activity.navigationItem.backButtondisplayMode = .minimal
profile.navigationItem.backButtondisplayMode = .minimal
} else {
nav1.navigationItem.backButtonTitle = ""
nav2.navigationItem.backButtonTitle = ""
nav3.navigationItem.backButtonTitle = ""
nav4.navigationItem.backButtonTitle = ""
nav5.navigationItem.backButtonTitle = ""
}
let boldConfig = UIImage.SymbolConfiguration(weight: .semibold)
nav1.tabBarItem = UITabBarItem(title: "",image: UIImage(systemName: "house",withConfiguration: boldConfig),tag: 1)
nav2.tabBarItem = UITabBarItem(title: "",image: UIImage(systemName: "magnifyingglass",tag: 1)
nav3.tabBarItem = UITabBarItem(title: "",image: UIImage(systemName: "plus.app",tag: 1)
nav4.tabBarItem = UITabBarItem(title: "",image: UIImage(systemName: "heart",tag: 1)
nav5.tabBarItem = UITabBarItem(title: "",image: UIImage(systemName: "person.circle",tag: 1)
self.setViewControllers(
[nav1,nav2,nav3,nav4,nav5],animated: false
)
}
}
这是我用来创建 TabbarController 的代码。如何更改为中心按钮(加号)以充当按钮,它不呈现 ViewController,而是一个动作,如 CardView。我在媒体上找到了一篇文章,但这对我不起作用。有谁知道答案吗?我觉得他们对这个问题的解决方案并不多。
解决方法
自己发现的。添加 UITabBarControllerDelegate 并将委托设置为 self。然后放入这个函数:
func tabBarController(_ tabBarController: UITabBarController,shouldSelect viewController: UIViewController) -> Bool {
if viewController == tabBarController.viewControllers?[2] {
let vc = EditorViewController()
vc.modalPresentationStyle = .overFullScreen
present(vc,animated: false,completion: nil)
return false
}
return true
}