Подкласс UIButton не может назначить цель - Swift 4 - PullRequest
0 голосов
/ 16 сентября 2018

Я посмотрел на другие ответы на аналогичный вопрос и следовал приведенному там совету, но здесь я не получаю ошибок, но целевая функция никогда не запускается.

У меня есть этот подкласс UIButton

class RoundedButton: UIButton {

var buttonColour: UIColor = UIColor.red
var height: CGFloat = 0
var width: CGFloat = 0
var text: String = ""
var x: CGFloat = 0
var y: CGFloat = 0

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

init(frame: CGRect, colour: UIColor, height: CGFloat, text: String, width: CGFloat, x: CGFloat, y: CGFloat) {
    super.init(frame: frame)
    self.buttonColour = colour
    self.height = height
    self.text = text
    self.width = width
    self.x = x
    self.y = y
    setUpView()
}



func setUpView() {
    let roundedButton = UIButton(frame: CGRect(x: x, y: y, width: width, height: height))
    roundedButton.backgroundColor = buttonColour
    roundedButton.setTitle(text, for: .normal)
    roundedButton.setTitleColor(UIColor.white, for: .normal)
    roundedButton.layer.cornerRadius = 4
    roundedButton.addTarget(self, action: #selector(self.wasPressed(_:)), for: .touchUpInside)
    self.addSubview(roundedButton)
}



@objc func wasPressed(_ sender: UIButton) {
    print("was pressed")
}

}

И я называю это так:

let addReview = RoundedButton(frame: CGRect(), colour: #colorLiteral(red: 0.9921568627, green: 0.6941176471, blue: 0.2, alpha: 1), height: 48, text: "Review", width: UIScreen.main.bounds.width - 16, x: 8, y: UIScreen.main.bounds.maxY - 56)
                self.view.addSubview(addReview)

Однако функция wasPressed (_ sender: UIButton) никогда не печатает "нажато". Кто-нибудь знает, почему это может быть?

Также возможно добавить цель так, чтобы она вызывала «динамическую» цель в суперклассе. Например, я могу каждый раз отправлять подклассу другую цель.

Это сделано для того, чтобы я мог использовать этот класс RoundedButton для создания нескольких кнопок.

1 Ответ

0 голосов
/ 16 сентября 2018

Вам не нужно добавлять еще одну кнопку внутри func setUpView(), поскольку вы уже находитесь внутри подкласса кнопки, поэтому настройте ее свойства напрямую, все объявленные вами свойства уже существуют в кнопке

class RoundedButton: UIButton {

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

    init(frame: CGRect, colour: UIColor, text: String) {
        super.init(frame: frame)

        self.backgroundColor = colour
        self.setTitle(text, for: .normal)
        self.setTitleColor(UIColor.white, for: .normal)
        self.layer.cornerRadius = 4
        self.addTarget(self, action: #selector(self.wasPressed(_:)), for: .touchUpInside)

    }

    @objc func wasPressed(_ sender: UIButton) {
        print("was pressed")
    }

}

//

let addReview = RoundedButton(frame: CGRect(x:8,y:UIScreen.main.bounds.maxY - 56,width: UIScreen.main.bounds.width - 16, height: 48), colour: #colorLiteral(red: 0.9921568627, green: 0.6941176471, blue: 0.2, alpha: 1), text: "Review" )
self.view.addSubview(addReview)
...