Swift, Custom UIButton не работает при нажатии

У меня есть пользовательский UIButton, созданный с помощью файла XIB. Когда я использую свою пользовательскую кнопку в моем представлении, она не работает, когда я нажимаю на нее.

Мой файл RoundBtn.swift:

import UIKit

@IBDesignable class RoundBtn: UIButton {

    var nibName = "RoundBtn"

    @IBOutlet weak var btnImageView: UIImageView!
    @IBOutlet weak var btnLabel: UILabel!

    @IBInspectable var image: UIImage? {
        get {
            return btnImageView.image
        } set(image) {
            btnImageView.image = image
        }
    }

    @IBInspectable var label: String? {
        get {
            return btnLabel.text
        } set(label) {
            btnLabel.text = label
        }
    }

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

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

    func setup() {
        let view = loadViewFromNib()
        view.frame = self.bounds
        view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
        btnImageView.layer.cornerRadius = 60/2
        btnImageView.layer.borderColor = UIColor(red: 5/255,
            green: 66/255, blue: 38/255, alpha: 1).CGColor
        btnImageView.layer.borderWidth = 2
        btnLabel.font = UIFont.boldSystemFontOfSize(14.0)
        btnImageView.userInteractionEnabled = true
        btnLabel.userInteractionEnabled = true
        view.userInteractionEnabled = true
        addSubview(view)
    }

    func loadViewFromNib() -> UIButton {
        let bundle = NSBundle(forClass: self.dynamicType)
        let nib = UINib(nibName: nibName, bundle: bundle)
        let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIButton   
        return view
    }   
}

Мой файл RoundBtn.xib:

Посмотрите, где я использовал свою пользовательскую кнопку:

Я включил userInteractionEnabled на всех компонентах представления. Когда я нажимаю на свою пользовательскую кнопку, она не работает. Я попытался, определив щелчок программно и определив действие segue (показать).

@IBAction func myCartBtnPressed(sender: AnyObject) {
    print("my cart btn pressed")
}

2 ответа

Решение

Я думаю, что это вызвано тем, что вы добавляете пару подпредставлений UIViews к вашей текущей UIButton с помощью userInteractionEnabled, что означает, что они обрабатывают пользовательский ввод.

Если вы делаете:

view.isUserInteractionEnabled = false

Сам RoundBtn получит все сенсорные события вместо этих UIViews, которые у вас есть сверху.

Ссылаясь на ответ @fdiaz. Свифт 4 нотации.

И наоборот, если вы присоединяете некоторое UIButton (или интерактивное представление пользователя) к UIImageView, вы должны повернуть его isUserInteractionEnabled = true, чтобы позволить касаниям проходить иерархию вверх вплоть до UIButton.

Другие вопросы по тегам