使自定义标题视图可以点击 swift

Make custom title view click able swift

我自定义了标题视图,在其中添加了图像和标签,我想让它可以点击,但它不起作用。我在标题视图中添加了点击手势,但它不起作用。

这是我的代码。

func navTitleWithImageAndText(titleText: String,subTitleText:String, imageName: String) -> UIView {
        // Creates a new UIView
        let titleView = UIView()
         let label = UILabel(frame: CGRect(x: 0, y: -15, width: 0, height: 0))
        // Creates a new text label
       // let label = UILabel()
        label.text = titleText
        
        label.font = UIFont.boldSystemFont(ofSize: 17)
        //label.center = titleView.center
        label.textColor = .white
        //label.textAlignment = NSTextAlignment.center
        label.sizeToFit()
        
        let subtitleLabel = UILabel(frame: CGRect(x: 0, y: 5, width: 0, height: 0))
        subtitleLabel.backgroundColor = UIColor.clear
        subtitleLabel.textColor = UIColor.white
        subtitleLabel.font = UIFont.systemFont(ofSize: 12)
        subtitleLabel.text = subTitleText
        subtitleLabel.sizeToFit()

        // Creates the image view
        let image = UIImageView()
        image.image = UIImage(named: imageName)
        // Maintains the image's aspect ratio:
        let imageAspect = image.image!.size.width / image.image!.size.height

        // Sets the image frame so that it's immediately before the text:
        let imageX = label.frame.origin.x - label.frame.size.height * imageAspect - 20
        let imageY = label.frame.origin.y
        let imageWidth = label.frame.size.height * imageAspect + 15
        let imageHeight = label.frame.size.height + 15
        image.frame = CGRect(x: imageX, y: imageY, width: imageWidth, height: imageHeight)
        image.contentMode = UIView.ContentMode.scaleAspectFit
        // Adds both the label and image view to the titleView
        titleView.addSubview(label)
        titleView.addSubview(image)
        titleView.addSubview(subtitleLabel)
        // Sets the titleView frame to fit within the UINavigation Title
        titleView.sizeToFit()
        return titleView
    } 

在其中添加点击手势。但为什么它不起作用。

titleView.addGestureRecognizer(titleGestureRecognizer)

titleView.isUserInteractionEnabled = 真

我通过以下方式在标签上实现了点击手势:-

初始化变量

var tap_gest = UITapGestureRecognizer()

在 Label 上添加手势。在"viewDidLoad()"

中添加如下代码

如果是普通标签则使用下面

self.register_as_company_lbl.isUserInteractionEnabled = true // register_as_company_lbl is my label where tap gesture added
self.tap_gest.addTarget(self, action: #selector(registerAsComapany))
self.register_as_company_lbl.addGestureRecognizer(tap_gest)

如果在导航栏标题上则使用下方

self.navigationController?.navigationBar.addGestureRecognizer(tap_gest)

在 ViewController Class 中定义 Selector 方法如下

 @objc func registerAsComapany(){//Add your task what you perform, In my case I have to push to another screen
     let vc = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CompanyDetailsViewController") as! CompanyDetailsViewController
     self.navigationController?.pushViewController(vc , animated: true)
   }