uitabbarcontroller - 如何将中心选项卡项更改为按钮,其作用类似于操作按钮?
问题描述
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",withConfiguration: boldConfig), tag: 1)
nav3.tabBarItem = UITabBarItem(title: "", image: UIImage(systemName: "plus.app",withConfiguration: boldConfig), tag: 1)
nav4.tabBarItem = UITabBarItem(title: "", image: UIImage(systemName: "heart",withConfiguration: boldConfig), tag: 1)
nav5.tabBarItem = UITabBarItem(title: "", image: UIImage(systemName: "person.circle",withConfiguration: boldConfig), tag: 1)
self.setViewControllers(
[nav1, nav2, nav3, nav4, nav5],
animated: false
)
}
}
这是我用来创建 TabbarController 的代码。如何更改为中心按钮(加号)以充当按钮,它不呈现 ViewController,而是呈现动作,如 CardView。我在 medium 上找到了一篇文章,但这对我不起作用。有人知道答案吗?我觉得他们对这个问题没有太多的解决方案。
解决方案
自己发现的。添加 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
}
推荐阅读
- java - 使用 JAVA 将 .vox 转换为 .mp3
- javascript - 可以捕获 ERR_BLOCKED_BY_CLIENT Axios 吗?
- c++ - Getting undocumented error code from recvfrom
- reactjs - 在 Heroku 上部署 react/apollo-server 应用程序
- python - 如何在 Python 中将 CSV 列作为字符串读取
- indexing - 找出列中每个字段的范围
- c# - CRM 查询是否需要在线 Asp.net 应用程序中的 Azure 凭据或令牌?
- rebus - 带有 Rebus 的可配置主题名称
- json - 如何从字符串中提取某些信息并在python中创建一个json对象
- java - 用于动态创建成员变量和 getter 方法的 Java 助手类