gpt4 book ai didi

ios - 自定义 UIScrollView 类中的 UIButton 不响应触摸

转载 作者:行者123 更新时间:2023-11-28 14:52:52 25 4
gpt4 key购买 nike

我有一个如下所示的 View 结构;

-->Custom Scroll View
-->Container View
-->View
-->Button

我的问题是我正在向 UIButton 添加一个目标,但未调用触摸功能。我试图在自定义 View 类或 View Controller 中添加目标。然而,两者都不起作用。

我检查了什么;

  • 我检查了是否所有 View 的 isUserInteractionEnabled 都设置为 true,并且它们都是 true。
  • 我还检查了按钮是否有框架(一些帖子说 UIButton 可以看到但你不能触摸它,因为它没有框架)。

我可能检查了堆栈溢出中的每个答案,其中大部分都在谈论 isUserInteraction 和层次结构,我认为它们在我的情况下都是正确的。

UIButton not clickable when custom view called

Custom UIView add target not called

我如何创建自定义 View 并在其中添加按钮。

class TyreChangeScrollView: UIScrollView {

//E-Mail
let emailTitleLbl = BaseLabel()
let emailBgView = UIView()
let emailLbl = BaseLabel()
public let emailInfoBtn = UIButton()

let contentView: UIView = {
let v = UIView()
v.translatesAutoresizingMaskIntoConstraints = false
return v
}()

var shouldSetupConstraints = true

override init(frame: CGRect) {
super.init(frame: frame)
updateUI()
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}

func updateUI(){
addSubview(contentView)

emailTitleLbl.translatesAutoresizingMaskIntoConstraints = false
emailTitleLbl.text = "E-POSTA ADRESİ"
emailTitleLbl.textAlignment = .left
contentView.addSubview(emailTitleLbl)

emailLbl.translatesAutoresizingMaskIntoConstraints = false
emailLbl.text = "hello@hello.com"
emailLbl.textAlignment = .left
emailInfoBtn.setImage(UIImage(named: "info"), for: .normal)
emailInfoBtn.isUserInteractionEnabled = true
emailBgView.backgroundColor = Color.Common.fieldBg
emailBgView.addSubview(emailLbl)
emailBgView.addSubview(emailInfoBtn)
contentView.addSubview(emailBgView)
}
override func updateConstraints() {
if(shouldSetupConstraints) {
// AutoLayout constraints
contentView.translatesAutoresizingMaskIntoConstraints = false
// constrain the scroll view to 8-pts on each side
contentView.anchor(self.topAnchor, left: self.leftAnchor, bottom: self.bottomAnchor, right: self.rightAnchor, topConstant: 0, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 0)
contentView.widthAnchor.constraint(equalTo: self.widthAnchor, multiplier: 1.0).isActive = true

emailTitleLbl.anchor(phoneLbl.bottomAnchor, left: contentView.leftAnchor, bottom: nil, right: contentView.rightAnchor, topConstant: 10, leftConstant: 20, bottomConstant: 0, rightConstant: 16, widthConstant: 0, heightConstant: 0)
emailLbl.anchor(emailBgView.topAnchor, left: emailBgView.leftAnchor, bottom: emailBgView.bottomAnchor, right: nil, topConstant: 0, leftConstant: 15, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 0)
emailInfoBtn.anchor(emailBgView.topAnchor, left: nil, bottom: emailBgView.bottomAnchor, right: emailBgView.rightAnchor, topConstant: 0, leftConstant: 0, bottomConstant: 0, rightConstant: 10, widthConstant: 0, heightConstant: 0)
emailBgView.anchor(emailTitleLbl.bottomAnchor, left: contentView.leftAnchor, bottom: nil, right: contentView.rightAnchor, topConstant: 10, leftConstant: 20, bottomConstant: 0, rightConstant: 16, widthConstant: 0, heightConstant: 50)

shouldSetupConstraints = false
}
super.updateConstraints()
}
}

我如何声明自定义类并将目标添加到 UIButton。

class TyreChangeViewController: BaseViewController{

let scrollView = TyreChangeScrollView()

override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.
designUI()
scrollView.emailInfoBtn.addTarget(self, action: #selector(emailBtnTapped(_:)), for: UIControlEvents.touchUpInside)
scrollView.phoneInfoBtn.addTarget(self, action: #selector(phoneBtnTapped(_:)), for: UIControlEvents.touchUpInside)

}
override func viewWillAppear(_ animated: Bool) {

scrollView.anchor(topLayoutGuide.bottomAnchor, left: view.leftAnchor, bottom: bottomLayoutGuide.topAnchor, right: view.rightAnchor, topConstant: 10, leftConstant: 10, bottomConstant: 10, rightConstant: 10, widthConstant: 0, heightConstant: 0)
}
func designUI(){

view.backgroundColor = Color.Common.screenBgColor
scrollView.backgroundColor = Color.Common.screenBgWhite
view.addSubview(scrollView)

}
@objc func emailBtnTapped(_ sender: UIButton){
print("hello")
}}

编辑:如果我向内容 View 添加高度限制,按钮可以工作,但现在它不可滚动。

contentView.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 1.0).isActive = true

最佳答案

添加约束后刷新布局是必须的

override func viewWillAppear(_ animated: Bool) {

scrollView.anchor(topLayoutGuide.bottomAnchor, left: view.leftAnchor, bottom: bottomLayoutGuide.topAnchor, right: view.rightAnchor, topConstant: 10, leftConstant: 10, bottomConstant: 10, rightConstant: 10, widthConstant: 0, heightConstant: 0)

self.view.layoutIfNeeded()
}

关于ios - 自定义 UIScrollView 类中的 UIButton 不响应触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49670899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com