Свяжите действие @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
}
}
Итак, вот лучшее решение, которое я придумал до сих пор.
- Внутри моего.xib я связываю кнопку с пустым @IBAction.
- Снова внутри моего.xib я создал протокол с единственным методом, который я буду вызывать внутри @IBAction, созданного в шаге (1.)
- @IBAction будет запускать метод протокола каждый раз, когда он вызывается, поэтому каждый раз, когда нажимается кнопка.
- Реализуйте заглушку протокола в каждом ViewController, который должен обрабатывать @IBAction, и не забудьте связать этот ViewController с.xib, используя протокол, созданный в шаге (2.)