Не удалось добавить целевое действие к классу UIButton внутри пользовательского класса View - PullRequest
0 голосов
/ 07 апреля 2020

У меня проблема с добавлением целевого действия в UIButton, созданную в пользовательском классе UIView.

Пожалуйста, посмотрите этот код для объяснения -

public class ReActivateSubscriptionView: UIView {

    @IBOutlet weak var reActiveSubscriptionLabel: UILabel!
    @IBOutlet weak var activateNowButton: UIButton!
    @IBOutlet weak var collapseSubscribeViewButton: UIButton!


    var viewModel: ReActivateSubscriptionViewPresentable! {
        didSet {
            viewModel.delegate = self
        }
    }

    func configure(with viewModel: ReActivateSubscriptionViewPresentable) {
        self.viewModel = viewModel
        configureSubViews()
    }

    public static var isCollapsed = false

    public class var collapsedActivateNowBtn: UIButton {
        let activateButton = UIButton()

        activateButton.frame = CGRect(x: 16.0, y: 112, width: UIScreen.main.bounds.width - 32, height: 33)
        activateButton.applyStyle(Style.reActivateSubscriptionConfig.activateButton, text: Asset.String.reActivateButtonText, textAlignment: .center, shouldUnderline: true)
        activateButton.addCornerRadius(radius: 6.0)
        return activateButton
    }

    public func configureSubViews() {
        self.backgroundColor = .black
        self.reActiveSubscriptionLabel.applyStyle(Style.reActivateSubscriptionConfig.reActivateSubscribeLabel, text: Asset.String.reActivateText, textAlignment: .center)
        self.activateNowButton.applyStyle(Style.reActivateSubscriptionConfig.activateButton, text: Asset.String.reActivateButtonText, textAlignment: .center, shouldUnderline: true)
        self.addCornerRadius(radius: 6.0)
        self.collapseSubscribeViewButton.setImage(Asset.Image.whiteUpArrow, for: .normal)
        self.collapseSubscribeViewButton.addTarget(self, action: #selector(collapseActivateView), for: .touchUpInside)
        self.activateNowButton.addTarget(self, action: #selector(activateSubscription), for: .touchUpInside)
        ReActivateSubscriptionView.collapsedActivateNowBtn.addTarget(self, action: #selector(activateSubscription), for: .touchUpInside)
    }

    @objc func collapseActivateView() {
        viewModel.handleCollapseTap()
    }

    @objc func activateSubscription() {
        viewModel.activateSubscription()
    }
}

Я пытаюсь добавить целевое действие для моего collapsedActivateNowBtn, но при добавлении этой цели в configureSubViews

не выполняется никаких действий. Метод configure(with viewModel: ReActivateSubscriptionViewPresentable) вызывается после создания экземпляра ReActivateSubscriptionView.

1 Ответ

0 голосов
/ 07 апреля 2020

Вопрос немного неясен.

Но вот как вы правильно подкласс UIButton, чтобы он "знал", что на него нажали:

import UIKit

class MyButton: UIButton {

    override func didMoveToSuperview() {
        super.didMoveToSuperview()
        addTarget(self, action: #selector(clicked), for: .touchUpInside)
    }

    @objc func clicked() {
        print("I have been clicked")
    }

}

(Как правило, всегда подкласс . Не пытайтесь добавлять поведение, которое вам нужно "сверху" - подкласс.)

Опять неясно, что именно вы пытаетесь сделать, OP, но вот как Вы делаете кнопку «знать», что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...