2016-11-30 12 views
1

UISideMenuNavigationControllerが表示されるか消えるたびにボタンイメージを変更したいと思います。ViewDidAppearとViewDidDisAppearにコードを挿入するにはどうすればいいですか?

ボタンを持つクラスです。

class MenuViewController: UIViewController { 

    @IBOutlet var btnMenu: UIButton! 

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

これはコードを挿入したい別のクラスです。

open class UISideMenuNavigationController: UINavigationController { 

     override open func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 

     // insert some code here but from MenuViewController class 
     } 

     override open func viewDidDisappear(_ animated: Bool) { 
     super.viewDidDisappear(animated) 

     // insert some code here but from MenuViewController class 
     } 
} 

ポッドからフレームワークであるため、UISideMenuNavigationControllerクラスを変更したくありません。

私はサイドメニューが現れたり消えたときにボタン画像を変更する必要がhttps://github.com/jonkykong/SideMenu

からフレームワークのサイドメニューを使用しています。私はReadMeサイドメニューから道を見つけることができません。だからこそ私はサイドメニュークラスからViewDidAppearとViewDidDisappearメソッドにコードを挿入する必要があると思うが、クラスを中断したくないと思うのだ。

+0

どのように変更せずにコードを挿入しますか?これが何を意味するのかを説明する必要があるかもしれません。 –

+0

私は@SonofaBeach – stevengbu

+0

の答えを更新しました...クラスを "壊す"ことなく "コードを挿入する"方法は?これはどういう意味ですか?以下の両方の答えで示唆されているように、サブクラス化することができます。 –

答えて

4

protocol MyUISideMenuDelegate { 
    func menuDidAppear(_ menu:MyUISideMenuNavigationController) -> Void 
    func menuDidDisappear(_ menu:MyUISideMenuNavigationController) -> Void 
} 

open class MyUISideMenuNavigationController: UISideMenuNavigationController { 

    var menuDelegate: MyUISideMenuDelegate? 

    override open func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     self.menuDelegate?.menuDidAppear(self) 
    } 

    override open func viewDidDisappear(_ animated: Bool) { 
     super.viewDidDisappear(animated) 
     self.menuDelegate?.menuDidDisappear(self) 
    } 
} 

次に、ボタンを使用してコントローラを表示し、プロトコルを実装して、それ自体をデリゲートとして設定してください。

また、メニューサブクラスにNSNotificationを送信し、それらのサブスクリプションに興味のある他のオブジェクトを持つこともできます。この方法で、メニューと他のクラスを完全に切り離します。

+0

コードのエラーはありませんが、メニューをスワイプしたときにエラーが発生しました。このクラスはキーleftSideに対してキー値コーディングに準拠していません。 – stevengbu

+0

これは、ストーリーボードのシーンがコンセント 'leftSide'を参照していることを意味しますが、そのシーンのクラスには' @BOutlet''というleftSideはありません。カスタムクラスを正しく設定していることを確認し、必要に応じてコンセントを作成してください – Paulw11

1
  1. MenuViewControllerクラスには、ボタンの画像を変更する機能があります。例えば、func changeButtonMenuImage()
  2. 'UISideMenuNavigationController'(またはそのサブクラス)は、MenuViewControllerとプロパティ、インスタンス変数またはIBOutletのいずれかとして接続できます。たとえば、@IBOutlet var menuController: MenuViewController
  3. viewDidAppearviewDidDisappearは、その機能を呼び出すことができます。例えば、あなたは、単にUISideMenuNavigationControllerをサブクラス化し、デリゲートを呼び出すためにviewDidAppear & viewDidDisappearメソッドをオーバーライドする必要がmenuController.changeButtonMenuImage()
+0

フレームワークなので、UISideMenuNavigationControllerクラスを変更したくありません。ありがとう – stevengbu

+0

サブクラス化することができますし、サブクラスにこれらの同じ変更を行います。これを含めるように答えが更新されました。 –

関連する問題