Webview Controllerには、保存機能を実行するためのUIButtonアクションがあります。 Webビューコントローラー内でアクションを実行できます。私の場合、cardViewControllerからwebviewコントローラーの保存アクションを実行する必要があります。しかし、何も実行されません。
CardViewControllerのコードは次のとおりです。
@IBAction func backBtn(_ sender: Any) {
WebViewController().saveBtn(self)
}
これは、webviewコントローラーのコードです。
@IBAction func saveBtn(_ sender: Any) {
// handling code
print("save button tapped")
tapCallback?()
}
どんな助けも大歓迎ですpls ..
この場合、CardViewController
とWebViewController
の両方が同時に表示されるため、「通知」アプローチを使用できます。ユーザーがbackButtonをクリックしたときにCardViewController
からの通知を投稿します。この通知は、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()
}
ビューコントローラーがストーリーボードで作成されていて、その間にセグエがある場合は、デリゲートをprepareForSegue
に次のように設定できます。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let cardViewController = segue.destination as? CardViewController {
cardViewController.delegate = self
}
}