Как сделать пользовательский вид с помощью кнопки - PullRequest
0 голосов
/ 09 апреля 2019

Я хочу сделать пользовательский вид, который будет иметь метку и кнопку.

Мне придется показывать это представление в нескольких контроллерах представления, но действие по нажатию кнопки различно для всех контроллеров представления.

Как я могу решить эту проблему .?

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Создание подкласса UIView с меткой и кнопкой.Добавьте в это представление необязательное свойство замыкания.

class CustomView: UIView {

    var buttonAction: (()->Void)?

    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }
    func commonInit() {
        //add label and button
        let button = UIButton()
        button.addTarget(self, action: #selector(buttonTapped(_:)), for: .touchUpInside)
    }
    @objc func buttonTapped(_ sender: UIButton) {
        if let buttonAction = self.buttonAction {
            buttonAction()
        }
    }
}

И добавьте экземпляр этого представления в любой контроллер представления.Чтобы получить действие кнопки в этом конкретном контроллере представления, назначьте замыкание для необязательного свойства closure.

class ViewController: UIViewController {
    let customView = CustomView()
    override func viewDidLoad() {
        super.viewDidLoad()
        // add customView in self.view or any other view
        customView.buttonAction = { [weak self] in
            print("button tapped")
            //do your actions here
        }
    }
}
1 голос
/ 09 апреля 2019

Способ 1: Вы можете легко создать повторно используемое представление с помощью файлов пера (.XIB) и назначить ему собственный класс представления пользовательского интерфейса для ссылки на метку и кнопку.

Затем в каждом из ваших контроллеров представления вы можете программно добавлять эти подпредставления и использовать эти ссылки для вызова функции, уникальной для вашего контроллера представления.

Пример

    if let yourView = Bundle.main.loadNibNamed("yourView", owner:self, options:nil)?.first as? yourView //references your reusable custom view
yourView.yourLabel.text = "Your String Here" //change the label according to which view controller
yourView.yourButton.addTarget(self, action: #selector(ViewController.yourFunction(sender:)), for: .touchUpInside) //add function according to view controller
self.view.addSubview(yourView)

Способ 2: Кроме того, вы можете предпочесть использовать один вид и контроллер представления вместо этого в зависимости от ваших предпочтений / функциональности. Для этого просто измените свою метку или функцию в зависимости от того, какие данные были переданы ей с использованием prepareForSegue или protocol / Delegate.

...