我有点卡住了。
我有一个 UIViewController
和一个扩展 UIView
的自定义 pop.xib
。
pop.xib
连接到 pop.swift
。
在 UIViewController
中,一个按钮会弹出 .xib
文件。
在 pop.xib
中有一个按钮,单击该按钮可将一些数据发送到数据库。
但是当在 pop.xib
中单击该按钮以发送数据时,我希望 UIViewController
到
a) 知道什么时候 @IBAction func sendDataToDbAction(_ sender: Any)
被点击并且
b) 当 if 语句从 sendDataToDbAction
内部返回 false 时,然后在 UIViewController
上显示警报
//pop.swift
class Pop: UIView {
@IBOutlet var delegate: AnswerDelegate?
@IBAction func sendDataToDbAction(_ sender: Any)
{
if(answer == false)
{
don't send to db
alert pops up saying answer is false
}
else
{
}
}
}
我在 pop.swift 中设置了一个委托(delegate)
//pop.swift
@objc protocol AnswerDelegate {
func isCorrectAnswer()
}
//UIViewController
extension UIViewController:AnswerDelegate{
//set the pop.xib delegate to self
// implement func isCorrectAnswer
}
我只是不确定如何使用委托(delegate)来做我想做的事。
谢谢。
最佳答案
检查一下,你可以这样做。
Pop.swift
@objc protocol AnswerDelegate {
func isCorrectAnswer()
}
class Pop: UIView {
var answerDelegate: AnswerDelegate?
class func instanceFromNib() -> Pop {
return UINib(nibName: "Pop", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! Pop
}
@IBAction func sendDataToDbAction(_ sender: Any)
{
if(answer == false) {
//Alert
}
else {
answerDelegate?.isCorrectAnswer()
}
}
}
Controller :
class ViewController: UIViewController, AnswerDelegate {
func isCorrectAnswer() {
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let popView = Pop.instanceFromNib()
popView.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
popView.answerDelegate = self
self.view.addSubview(popView)
}
}
关于ios - 如何在 swift 中使用委托(delegate)通知 UIViewController 在 xib 文件中单击了一个按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47705964/