在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?()
}
任何帮助,非常感激,请...
在你的 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?()
}
}
因为,在这种情况下,两个 CardViewController
和 WebViewController
同时呈现,您可以采取 "通知 "的方式。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)
}
你正在创建一个全新的 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?()
}
然后,当你创建时,设置委托人 CardViewController
在 WebViewController
:
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
}
}