在Swift中,相对于addGestureRecognizer(),在哪里声明UITapGestureRecognizer()?

王凯文|

问题

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!"
    }

}

更新1/19/2019

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作为实例属性初始化器中的目标时,并不意味着您认为自己做了什么(这表示,而不是实例)。 ,因此当您点击时,该消息将被误导且不执行任何操作。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在jQuery中相对于parent获得offset()?

使用VBA声明相对于活动单元的范围

相对于每个组中的值的比例(通过dplyr)

Web组件中的路径相对于根

如何相对于Hakyll的CSS文件中的URL?

相对于我的项目,我在哪里放置conda食谱?

您可以在公开课之外使用Scanner吗?相对于公共课程,您将把单独的课程放在哪里?

声纳应该相对于travis中的project baseDir`错误

在Matplotlib中相对于图形移动轴

如何在pygame中建立相对于歌曲的路径

在gnuplot中声明两个数组,并将它们相对于另一个绘制

使数组中的数字相对于0-100

在结构中声明常量变量导致我此错误,非静态成员引用必须相对于特定对象

导入python类,相对于哪里?

在Perl中获取相对于主目录的路径

g ++中相对于-I(大写i)的路径在哪里?

将按钮相对于XCode中的背景图像

相对于Swift中另一个视图的位置视图

Vaadin中相对于按钮文本的按钮大小

相对于Xamarin.Forms中的ViewCell更新视图

在threejs中相对于球体中心跟踪精度

相对于其他模型在哪里进行验证

在Java中相对于整个列设置excel公式?

在 JointJS 中,如何相对于端口定位端口的标签?

相对于 ASP.NET 中的根目录

相对于 JavaScript 中的绝对图像 src

Angular 中模块相对于组件的进步是什么?

相对于元组中的整数值的列表比较列表

相对于 React 中的容器在更改时缩放文本