如何在iOS Swift中从视图控制器调用UIButton动作到另一个视图控制器?

问题描述 投票:0回答:1

在Webview控制器中,我有UIButton动作来执行保存功能。我可以在Webview控制器内执行动作。在我的例子中,想从cardViewController中执行一个webview控制器的保存动作。但是什么都没有执行。

这里是CardViewController的代码。

  @IBAction func backBtn(_ sender: Any) {


        WebViewController().saveBtn(self)

   }

这是webview控制器的代码

    @IBAction func saveBtn(_ sender: Any) {

    // handling code
    print("save button tapped")
    tapCallback?()


  }

enter image description here

任何帮助,非常感激,请...

ios swift uibutton delegates nsnotificationcenter
1个回答
3
投票

在你的 CardViewController

let webViewController = WebViewController() //Init WebViewController

webViewController.onSave = { [weak self] in
    // Do your logic when save done in WebViewController
}

present(webViewController, animated: true, completion: nil)

在你的WebViewController中。

class WebViewController: UIViewController {

    var onSave:(()->())?

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func buttonSaveInWebViewController(_ sender: Any) {
     // Do your logic
         onSave?()
    }

}

1
投票

因为,在这种情况下,两个 CardViewControllerWebViewController 同时呈现,您可以采取 "通知 "的方式。CardViewController 当用户点击backButton时。这个通知在 WebViewController 它与 saveBtn 功能。

//CardViewController
@IBAction func backBtn(_ sender: Any) {
    NotificationCenter.default.post(name: NSNotification.Name(rawValue:"backButtonPressed"), object: nil)
}

该通知可以在 WebViewController

//WebViewController
override func viewDidLoad() {
    super.viewDidLoad()
    NotificationCenter.default.addObserver(self, selector: #selector(self. saveBtn), name: "backButtonPressed", object: nil)
}

func saveBtn() {
    // your code
}

deinit {
    NotificationCenter.default.removeObserver(self)
}

0
投票

你正在创建一个全新的 WebViewController但你应该有你实际的参考资料。WebViewController. 你可以创建一个像这样的授权连接。

protocol CardViewControllerDelegate: AnyObject {
    func didClickSaveButton()
}

然后将其设置为 CardViewController:

class CardViewController {
    ....
    weak var delegate: CardViewControllerDelegate?
    ....
}

且让 WebViewController 实现。

extension WebViewController: CardViewControllerDelegate {
    func didClickSaveButton() {
        // handling code
        print("save button tapped")
        tapCallback?()
    }

然后,当你创建时,设置委托人 CardViewControllerWebViewController:

func showCardViewController() { // or whatever the name is
    let cardVC = CardViewController() // or however you load it
    cardVC.delegate = self
    present(cardVC, animated: true) // or however you show it
}

最后,连接到委托人。

@IBAction func backBtn(_ sender: Any) {
    delegate?.didClickSaveButton()
}

如果视图控制器是在Storyboard中制作的 而它们之间又有一个转折点的话 你可以将委托人设置为... prepareForSegue,喜欢。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let cardViewController = segue.destination as? CardViewController {
        cardViewController.delegate = self
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.