当 .touchUpInside 位于导航栏内时,按钮操作没有反应
Button action does not react when .touchUpInside inside a navigation bar
我创建了一个 UICollectionViewController 来模拟一个 Feed 应用程序,我想配置类似于 Twitter 的顶部导航栏,带有触发操作的自定义按钮,这是我的
我面临的问题是,当我点击黑色个人资料图标时,没有触发操作。
这是我的代码:
import UIKit
class HomeViewController: UICollectionViewController {
//MARK: - Properties
private lazy var profileButton: UIButton = {
let button = UIButton(type: .system)
button.setImage(UIImage(systemName: "person.fill"), for: .normal)
button.tintColor = UIColor(rgb: 0x79CBBF)
button.addTarget(self, action: #selector(didTapProfile), for: .touchUpInside)
return button
}()
// MARK: - Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
setupNavBar()
}
// MARK: - Helpers
func setupNavBar() {
let width = view.frame.width
let titleView = UIView()
titleView.backgroundColor = .clear
titleView.frame = .init(x: 0, y: 0, width: width, height: 50)
titleView.addSubview(profileButton)
profileButton.tintColor = .black
profileButton.centerY(inView: titleView, leftAnchor: titleView.leftAnchor, paddingLeft: 0)
titleView.addSubview(filterButton)
filterButton.centerY(inView: titleView, leftAnchor: profileButton.rightAnchor, paddingLeft: view.frame.width - 60 - 16)
navigationItem.titleView = titleView
}
// MARK: - Actions
@objc func didTapProfile() {
print("did tap profile")
}
如下所述,我向按钮添加了 .addTarget,但是当按钮位于导航栏内时,#selector(didTapProfile) 函数不会被触发。
关于如何执行此操作的任何提示?
无需创建标题视图并测量其大小和内容...有大量便利函数可用于执行此操作...
看看这里... https://www.hackingwithswift.com/example-code/uikit/how-to-add-a-bar-button-to-a-navigation-bar
你可以做类似...
navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(didTapProfile))
创建 UIBarButtonItem
图像和文本的方法多种多样...
https://developer.apple.com/documentation/uikit/uibarbuttonitem
我创建了一个 UICollectionViewController 来模拟一个 Feed 应用程序,我想配置类似于 Twitter 的顶部导航栏,带有触发操作的自定义按钮,这是我的
我面临的问题是,当我点击黑色个人资料图标时,没有触发操作。
这是我的代码:
import UIKit
class HomeViewController: UICollectionViewController {
//MARK: - Properties
private lazy var profileButton: UIButton = {
let button = UIButton(type: .system)
button.setImage(UIImage(systemName: "person.fill"), for: .normal)
button.tintColor = UIColor(rgb: 0x79CBBF)
button.addTarget(self, action: #selector(didTapProfile), for: .touchUpInside)
return button
}()
// MARK: - Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
setupNavBar()
}
// MARK: - Helpers
func setupNavBar() {
let width = view.frame.width
let titleView = UIView()
titleView.backgroundColor = .clear
titleView.frame = .init(x: 0, y: 0, width: width, height: 50)
titleView.addSubview(profileButton)
profileButton.tintColor = .black
profileButton.centerY(inView: titleView, leftAnchor: titleView.leftAnchor, paddingLeft: 0)
titleView.addSubview(filterButton)
filterButton.centerY(inView: titleView, leftAnchor: profileButton.rightAnchor, paddingLeft: view.frame.width - 60 - 16)
navigationItem.titleView = titleView
}
// MARK: - Actions
@objc func didTapProfile() {
print("did tap profile")
}
如下所述,我向按钮添加了 .addTarget,但是当按钮位于导航栏内时,#selector(didTapProfile) 函数不会被触发。
关于如何执行此操作的任何提示?
无需创建标题视图并测量其大小和内容...有大量便利函数可用于执行此操作...
看看这里... https://www.hackingwithswift.com/example-code/uikit/how-to-add-a-bar-button-to-a-navigation-bar
你可以做类似...
navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(didTapProfile))
创建 UIBarButtonItem
图像和文本的方法多种多样...
https://developer.apple.com/documentation/uikit/uibarbuttonitem