如何在tabBar中实现toolBar?
How to implement toolBar in tabBar?
我想在我的标签栏中实现一个工具栏,或者像在照片应用程序中那样结束我的标签栏。我给你看:
Tab Bar
点击 select 按钮时转向
Tool bar
我已经尝试将工具栏放在选项卡栏控制器视图中,但没有成功。
感谢您的回复!
一个简单的解决方案是在某些事件中隐藏 tabBar(照片应用程序有一个按钮可以执行此操作)。然后创建一个自定义工具栏并将其添加为视图控制器的子视图。
我相信这可能是您正在寻找的那种行为。您不必使用自定义 UIButton
,您可以使用 UIBarButtonItem
,但这取决于您,我只是选择使用自定义 UIButton
来演示它,以向您展示这是一种方法。
class ViewController: UIViewController {
var selectButton: UIButton!
var isInSelectMode = false
override func viewDidLoad() {
super.viewDidLoad()
selectButton = UIButton(type: .system)
selectButton.addTarget(self, action: #selector(selectButtonTapped), for: .touchUpInside)
selectButton.setTitle("Select", for: .normal)
view.addSubview(selectButton)
let trashButton = UIBarButtonItem(barButtonSystemItem: .trash, target: nil, action: nil)
toolbarItems = [trashButton]
selectButton.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
selectButton.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor, constant: -15),
selectButton.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor, constant: 15),
])
}
@objc func selectButtonTapped() {
isInSelectMode = !isInSelectMode
if isInSelectMode {
selectButton.setTitle("Done", for: .normal)
tabBarController?.tabBar.isHidden = true
tabBarController?.tabBar.backgroundColor = .systemBackground
navigationController?.setToolbarHidden(false, animated: true)
} else {
selectButton.setTitle("Select", for: .normal)
tabBarController?.tabBar.isHidden = false
tabBarController?.tabBar.backgroundColor = .clear
navigationController?.setToolbarHidden(true, animated: true)
}
}
}
它是这样的:
==> 在 iOS
15.5
中测试
==> 首先你的视图控制器必须嵌入 UINavigationController
==> 在 viewDidLoad
中将 editButtonItem
设置为 navigationItem
并配置 UINavigationController
原生 toolbarItems
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = editButtonItem
self.toolbarItems = [UIBarButtonItem(barButtonSystemItem: .trash, target: self, action: nil)]
}
==> 之后 override
setEditing
方法并根据需要实现您的逻辑。你完成了
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
self.tableView.setEditing(editing, animated: true)
self.tabBarController?.tabBar.isHidden = editing
self.navigationController?.setToolbarHidden(!editing, animated: true)
}
You can check it out image here
==> 但是有一个问题,需要进一步的帮助...如果有人有任何想法,请在下方评论..
Issue : toolbar
leave safeArea
space and came top of that...
您也可以查看 Demo Native toolbar Demo
我想在我的标签栏中实现一个工具栏,或者像在照片应用程序中那样结束我的标签栏。我给你看:
Tab Bar 点击 select 按钮时转向 Tool bar
我已经尝试将工具栏放在选项卡栏控制器视图中,但没有成功。
感谢您的回复!
一个简单的解决方案是在某些事件中隐藏 tabBar(照片应用程序有一个按钮可以执行此操作)。然后创建一个自定义工具栏并将其添加为视图控制器的子视图。
我相信这可能是您正在寻找的那种行为。您不必使用自定义 UIButton
,您可以使用 UIBarButtonItem
,但这取决于您,我只是选择使用自定义 UIButton
来演示它,以向您展示这是一种方法。
class ViewController: UIViewController {
var selectButton: UIButton!
var isInSelectMode = false
override func viewDidLoad() {
super.viewDidLoad()
selectButton = UIButton(type: .system)
selectButton.addTarget(self, action: #selector(selectButtonTapped), for: .touchUpInside)
selectButton.setTitle("Select", for: .normal)
view.addSubview(selectButton)
let trashButton = UIBarButtonItem(barButtonSystemItem: .trash, target: nil, action: nil)
toolbarItems = [trashButton]
selectButton.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
selectButton.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor, constant: -15),
selectButton.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor, constant: 15),
])
}
@objc func selectButtonTapped() {
isInSelectMode = !isInSelectMode
if isInSelectMode {
selectButton.setTitle("Done", for: .normal)
tabBarController?.tabBar.isHidden = true
tabBarController?.tabBar.backgroundColor = .systemBackground
navigationController?.setToolbarHidden(false, animated: true)
} else {
selectButton.setTitle("Select", for: .normal)
tabBarController?.tabBar.isHidden = false
tabBarController?.tabBar.backgroundColor = .clear
navigationController?.setToolbarHidden(true, animated: true)
}
}
}
它是这样的:
==> 在 iOS
15.5
==> 首先你的视图控制器必须嵌入 UINavigationController
==> 在 viewDidLoad
中将 editButtonItem
设置为 navigationItem
并配置 UINavigationController
原生 toolbarItems
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = editButtonItem
self.toolbarItems = [UIBarButtonItem(barButtonSystemItem: .trash, target: self, action: nil)]
}
==> 之后 override
setEditing
方法并根据需要实现您的逻辑。你完成了
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
self.tableView.setEditing(editing, animated: true)
self.tabBarController?.tabBar.isHidden = editing
self.navigationController?.setToolbarHidden(!editing, animated: true)
}
You can check it out image here
==> 但是有一个问题,需要进一步的帮助...如果有人有任何想法,请在下方评论..
Issue :
toolbar
leavesafeArea
space and came top of that...
您也可以查看 Demo Native toolbar Demo