2

複数のボタンを持つカスタム ナビゲーション バーを作成したカスタム ビュー コントローラーがあります。そのカスタム ビュー コントローラーを複数の子コントローラーの親として使用しました (複数のコントローラーで同じナビゲーション バーを使用するため)。いくつかのボタンクリック。問題は、そのボタンをクリックするたびにそのビューコントローラーのインスタンスが作成されることです。そして、同じコントローラーが表示されます。

これは、メニュー ボタン クリックのアクションです。

@objc func showMenu(){
let storyBoard = UIStoryboard(name: "Main", bundle: nil)
let menuVC = storyBoard.instantiateViewController(withIdentifier: "MenuVC") as! MenuVC
if menuVC.view.window ==nil {
UIView.transition(with: self.view, duration: 0.5, options: .curveEaseIn,          animations: {
       self.present(menuVC, animated: true, completion: nil)
    })
} else {
    // view controller is visible
   }
}

これは戻るボタンのクリックに対するアクションです:

@objc func  backBtnPressed(){
    self.dismiss(animated:true,complition:nil)
}

viewController.view.window を試しましたが、ボタンを押すたびに baseViewController の新しいインスタンスが作成されるという問題があります。

このシナリオでコントローラーが既に提示されていることを知る方法。

4

1 に答える 1

0

var menuVCローカル変数ではなく、インスタンス変数として変数を作成し、以下のように nil をチェックします。

if menuVC != nil {
// use the created instance of menuVC
} else {
// create menuVC 
}

このようにして、 のインスタンスは 1 つだけになりますmenuVC。不明な点はコメントしてください。

于 2018-07-30T12:17:41.850 に答える