gpt4 book ai didi

swift - 在 Swift 中,您在哪里声明与 addGestureRecognizer() 相关的 UITapGestureRecognizer()?

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

问题

centerLabelGesture 被定义在 viewDidLoad() 的范围之外,所以在调用 .addGestureRecognizer(centerLabelGesture) 时, centerLabelGesture 尚未定义。

import UIKit
import SnapKit

class ViewController: UIViewController {

var screen: UIView!
var centerLabel: UILabel!

override func viewDidLoad() {
super.viewDidLoad()
screen = UIView()
centerLabel = UILabel()

view.addSubview(screen)
screen.addSubview(centerLabel)

screen.backgroundColor = .white
screen.snp.makeConstraints { (make) in
make.top.equalTo(view)
make.right.equalTo(view)
make.left.equalTo(view)
make.bottom.equalTo(view)
}

centerLabel.text = "I hope I'm centered."
centerLabel.snp.makeConstraints { (make) in
make.center.equalTo(screen)
}
centerLabel.isUserInteractionEnabled = true
centerLabel.addGestureRecognizer(centerLabelGesture)
}

let centerLabelGesture = UITapGestureRecognizer(target: self, action: #selector(centerLabelTapped))

@objc func centerLabelTapped() {
centerLabel.text = "Ouch, you tapped me!"
}

}

2019 年 1 月 19 日更新

matt 指出 centerLabelGesture 需要在 centerLabel.addGestureRecognizer(centerLabelGesture) 之前声明,在 viewDidLoad()

最佳答案

这是一个微妙的错误。问题是您放置此行的位置:

let centerLabelGesture = UITapGestureRecognizer(target: self, action: #selector(centerLabelTapped))

将该行移动到 viewDidLoad 代码中:

centerLabel.isUserInteractionEnabled = true
let centerLabelGesture = UITapGestureRecognizer(target: self, action: #selector(centerLabelTapped))
centerLabel.addGestureRecognizer(centerLabelGesture)

原因是你得到那条线的地方,它是一个实例属性,当你说 self 作为实例属性初始化器中的目标时,它并不意味着你的想法确实如此(这意味着,而不是实例),所以当您点击时消息被误导并且什么都不做。

我已经在这个问题上提交了一个错误;在我看来,编译器至少应该警告您,您正在犯一个潜在的错误。

关于swift - 在 Swift 中,您在哪里声明与 addGestureRecognizer() 相关的 UITapGestureRecognizer()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51676744/

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