点击手势事件不适用于UIView

swift uiview uitapgesturerecognizer

827 观看

2回复

66 作者的声誉

我正在尝试向UIView添加轻击手势,但手势无法识别。

“ iconBadgeView”是一个UIView,具有在参数中传递的定义大小的图像。

lazy var cardioVascularIcon : IconBadgeView! = {

    let iconBadgeView = IconBadgeView(frame: CGRect(x: 0, y: 0, width: 95, height: 95), data:["big":"db_history"])

    let tapEvent = UITapGestureRecognizer(target: self, action: #selector(loadNewView(sender:)))

    tapEvent.numberOfTapsRequired = 1
    iconBadgeView.translatesAutoresizingMaskIntoConstraints = false

    iconBadgeView.isUserInteractionEnabled = true       
    iconBadgeView.addGestureRecognizer(tapEvent)
}()

有一个委托人附加到相同的类上,函数实现如下:

func loadNewView(sender: UITapGestureRecognizer)  {
    print("Tapped")
}

函数loadNewView没有被调用。我不确定代码中的错误所在。请有人帮忙。

我将iconBadgeView添加到超级视图,如下所示:

override init(frame: CGRect) {
    super.init(frame: CGRect.zero)

    addSubview(cardioVascularIcon)

    cardioVascularIcon.pinToSuperview([.Top])
    cardioVascularIcon.pinToSuperview([.Left], constant: 92)
    cardioVascularIcon.pinToSuperview([.Right], constant: 92)
}
作者: shaangon 的来源 发布者: 2017 年 9 月 15 日

回应 2


0

86 作者的声誉

您的iconBadgeView消失了,因为它是局部变量。

您必须初始化cardioVascularIcon var。

lazy var cardioVascularIcon : IconBadgeView! = {

  cardioVascularIcon.frame = CGRect(x: 0, y: 0, width: 95, height: 95)
  //here call function which sets data property

  let tapEvent = UITapGestureRecognizer(target: self, action: #selector(loadNewView(sender:)))

  tapEvent.numberOfTapsRequired = 1
  cardioVascularIcon.translatesAutoresizingMaskIntoConstraints = false

  cardioVascularIcon.isUserInteractionEnabled = true       
  cardioVascularIcon.addGestureRecognizer(tapEvent)
}()
作者: Dan 发布者: 2017 年 9 月 15 日

1

66 作者的声誉

决定

我有解决此问题的方法。我使用了按钮而不是标签,现在一切正常。以下是我正在使用的代码:

func createButton (buttonWidth : CGFloat?, buttonTitle : String?, buttonFont : UIFont?, imageName : String?, buttonColor : UIColor?) -> UIButton {
    let newButton = UIButton(type: . custom)
    newButton.showsTouchWhenHighlighted = false
    newButton.translatesAutoresizingMaskIntoConstraints = false
    newButton.adjustsImageWhenHighlighted = false

    if let title = buttonTitle {
        newButton.setTitle(title, for: .normal)
    }
    if let color = buttonColor {
        if let _ = newButton.titleLabel {
            newButton.setTitleColor(color, for: .normal)
        }
    }

    if let btnWidth = buttonWidth {
        newButton.frame = CGRect(x: 0, y: 0, width: btnWidth, height: btnWidth)
        newButton.layer.cornerRadius = 0.5 * newButton.bounds.size.width
        newButton.clipsToBounds = true
    }
    if let img = imageName {
        newButton.setImage(UIImage(named: img), for: .normal)
    }
    if let font = buttonFont {
        newButton.titleLabel?.font = font
    }

    return newButton
}
let addDiagButton = self.createButton(buttonWidth: nil, buttonTitle: addButtonTitle, buttonFont: UIFont.regularDisplayOfSize(30), imageName: nil, buttonColor: UIColor(red: 111, green: 160, blue: 186))

addDiagButton.addTarget(self, action: #selector(addDiag(sender:)), for: .touchUpInside)

上面的代码具有一个通用功能,该功能创建一个按钮,并将触发事件附加到该按钮上。该代码可以正常工作。

为了使其表现得像单击标签一样,我在createButton函数中添加了一行。

newButton.adjustsImageWhenHighlighted = false

单击时将限制按钮的闪光效果。

作者: shaangon 发布者: 2017 年 9 月 18 日
32x32