ios - 如何在 swift 中使用委托(delegate)通知 UIViewController 在 xib 文件中单击了一个按钮?

标签 ios swift uiviewcontroller delegates xib

我有点卡住了。 我有一个 UIViewController 和一个扩展 UIView 的自定义 pop.xibpop.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/

相关文章:

iphone - 如何使用 MPMediaPickerController 获取 mp3 的 NSData?

ios - 从 View Controller 转到 TableView 的下一个单元格

ios - 以编程方式导航到另一个 View Controller /场景

swift - UIAlertController 去新的 ViewController

ios - 如何将 UIViewController 的 Root View 重置或重新启动到其原始状态?

css - 保护 UIWebVIew 中的自定义字体

ios - 将 Firebase 添加到 Pod 项目

iphone - UITabBarController 上的 AddSubView

ios - 未调用委托(delegate)方法并给出 nil 值

ios - TableViewCell 中的 TableView 滚动问题