问题描述
我有一个带有导航栏的导航控制器,我添加了一个带有 imageView 和 UILabel 子视图的 UIView 用于 titleView.我需要能够单击该视图以在该视图上使用 addGestureRecognizer 执行其他操作,但控制台上未打印任何内容.UIImageView 必须在 UILabel 旁边
这是我目前尝试过的代码
private func setupNavBarWithUser() {让 titleView = UIView()让宽度 = titleView.sizeThatFits(CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)).widthtitleView.frame = CGRect(origin:CGPoint.zero, size:CGSize(width: width, height: 500))让 profileImageView = UIImageView()profileImageView.translatesAutoresizingMaskIntoConstraints = falseprofileImageView.contentMode = .scaleAspectFillprofileImageView.layer.cornerRadius = 20profileImageView.clipsToBounds = trueImageService.getImage(withURL: NSURL(string: (user?.pictureURL)!)! as URL) { (image) inprofileImageView.image = 图像}titleView.addSubview(profileImageView)profileImageView.leftAnchor.constraint(equalTo: titleView.leftAnchor).isActive = trueprofileImageView.centerYAnchor.constraint(equalTo: titleView.centerYAnchor).isActive = trueprofileImageView.widthAnchor.constraint(equalToConstant: 40).isActive = trueprofileImageView.heightAnchor.constraint(equalToConstant: 40).isActive = true让 nameLabel = UILabel()titleView.addSubview(nameLabel)nameLabel.text = user?.first_namenameLabel.textColor = .whitenameLabel.translatesAutoresizingMaskIntoConstraints = falsenameLabel.leftAnchor.constraint(equalTo: profileImageView.rightAnchor, 常量: 8).isActive = truenameLabel.centerYAnchor.constraint(equalTo: profileImageView.centerYAnchor).isActive = truenameLabel.rightAnchor.constraint(equalTo: titleView.rightAnchor).isActive = truenameLabel.heightAnchor.constraint(equalTo: profileImageView.heightAnchor).isActive = truetitleView.centerXAnchor.constraint(equalTo: titleView.centerXAnchor).isActive = truetitleView.centerYAnchor.constraint(equalTo: titleView.centerYAnchor).isActive = trueself.navigationItem.titleView = titleView让识别器 = UITapGestureRecognizer(target: self, action: #selector(self.testing))titleView.isUserInteractionEnabled = truetitleView.addGestureRecognizer(识别器)}@objc 功能测试(){打印(你好")}
希望有人能帮我解决这个问题,非常感谢!!
I have a navigation controller with a navigation bar, I have added a UIView with subview of imageView and UILabel for titleView.I need to be able to click on that view to do something else with addGestureRecognizer on that view but nothing is printed on the console.The UIImageView has to be next to the UILabel
Here is the code I tried so far
private func setupNavBarWithUser() {
let titleView = UIView()
let width = titleView.sizeThatFits(CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)).width
titleView.frame = CGRect(origin:CGPoint.zero, size:CGSize(width: width, height: 500))
let profileImageView = UIImageView()
profileImageView.translatesAutoresizingMaskIntoConstraints = false
profileImageView.contentMode = .scaleAspectFill
profileImageView.layer.cornerRadius = 20
profileImageView.clipsToBounds = true
ImageService.getImage(withURL: NSURL(string: (user?.pictureURL)!)! as URL) { (image) in
profileImageView.image = image
}
titleView.addSubview(profileImageView)
profileImageView.leftAnchor.constraint(equalTo: titleView.leftAnchor).isActive = true
profileImageView.centerYAnchor.constraint(equalTo: titleView.centerYAnchor).isActive = true
profileImageView.widthAnchor.constraint(equalToConstant: 40).isActive = true
profileImageView.heightAnchor.constraint(equalToConstant: 40).isActive = true
let nameLabel = UILabel()
titleView.addSubview(nameLabel)
nameLabel.text = user?.first_name
nameLabel.textColor = .white
nameLabel.translatesAutoresizingMaskIntoConstraints = false
nameLabel.leftAnchor.constraint(equalTo: profileImageView.rightAnchor, constant: 8).isActive = true
nameLabel.centerYAnchor.constraint(equalTo: profileImageView.centerYAnchor).isActive = true
nameLabel.rightAnchor.constraint(equalTo: titleView.rightAnchor).isActive = true
nameLabel.heightAnchor.constraint(equalTo: profileImageView.heightAnchor).isActive = true
titleView.centerXAnchor.constraint(equalTo: titleView.centerXAnchor).isActive = true
titleView.centerYAnchor.constraint(equalTo: titleView.centerYAnchor).isActive = true
self.navigationItem.titleView = titleView
let recognizer = UITapGestureRecognizer(target: self, action: #selector(self.testing))
titleView.isUserInteractionEnabled = true
titleView.addGestureRecognizer(recognizer)
}
@objc func testing() {
print("hello")
}
Hope someone can help me with this problem, much thank you !!
UPDATE this is where I need to add a gesture recognizer
Add this method in viewDidLoad/viewWillAppear
if let navigationBar = self.navigationController?.navigationBar {
// create a button
let button = UIButton(type: .custom)
button.frame = CGRect(x: navigationBar.frame.width/2-20, y: 0, width: 100, height: 40)
button.setTitleColor(.red, for: .normal)
button.setTitle("Button", for: .normal)
button.addTarget(self, action: #selector(self.testing), for: .touchUpInside)
// create a imageview
let profileImageView = UIImageView()
profileImageView.contentMode = .scaleAspectFill
profileImageView.layer.cornerRadius = 20
profileImageView.clipsToBounds = true
profileImageView.frame = CGRect(x: navigationBar.frame.width/2-60, y: 0, width: 40, height: 40)
profileImageView.image = UIImage(named: "heart")
// Add two elements to navigationbar
navigationBar.addSubview(profileImageView)
navigationBar.addSubview(button)
}
这篇关于添加手势识别器 uivew 导航栏 swift 不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!