当 .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