Свяжите действие @IBAction с кнопкой в ​​представлении.xib из ViewController

Я создал файл.xib для представления, которое будет повторяться в моем приложении для iOS, внутри которого есть кнопка UIButton.

Я включил это.xib представление в несколько UIViewControllers в моей раскадровке. Я хотел бы связать @IBAction и @IBOutlet с кнопкой в ​​моем представлении.xib, характерной для каждого UIViewController. Другими словами, я хочу, чтобы каждый UIViewController полностью управлял и обрабатывал UIButton, который находится внутри представления.xib.

Любая идея, если вышесказанное возможно?

3 ответа

Есть несколько способов сделать то, что вы хотите.

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

В вашем ViewController ведьма содержит представление xib, просто назначьте действие кнопке внутри представления xib

class YourViewController:UIViewController{
    override func viewDidLoad(){
        //ListTitleView : a xib view, action button witch called theManageButton is inside it.
        let theListTitleView = ListTitleView.init(frame:CGRect.init(x: 0, y: 0, width:  self.view.frame.width, height: 100))

        //Add action to theManageButton
        theListTitleView.theManageButton.addTarget(self, action: #selector(yourFunction(Sender:)), for: .touchUpInside)
    }

    func yourFunction(Sender:UIButton){
        //...Do something here
    }
}

Итак, вот лучшее решение, которое я придумал до сих пор.

  1. Внутри моего.xib я связываю кнопку с пустым @IBAction.
  2. Снова внутри моего.xib я создал протокол с единственным методом, который я буду вызывать внутри @IBAction, созданного в шаге (1.)
  3. @IBAction будет запускать метод протокола каждый раз, когда он вызывается, поэтому каждый раз, когда нажимается кнопка.
  4. Реализуйте заглушку протокола в каждом ViewController, который должен обрабатывать @IBAction, и не забудьте связать этот ViewController с.xib, используя протокол, созданный в шаге (2.)
Другие вопросы по тегам