参考にしたのは以下の二つのリンク
→逆引きObjective-C for iPhoneアプリ - デリゲートを自作クラスに実装する
→[iOS] Protocol – Delegateパターン | Objective-C イベント伝達 その1 « きんくまデザイン
以下、その手順です。
1. delegateプロパティをJASidePanelController.hに追加する
以下のコードをJASidePanelController.hに加えます。
@property (nonatomic, assign) iddelegate;
2. プロトコルをJASidePanelController.hファイルの中で定義します
プロトコルをJASidePanelController.hファイルの中にこう定義します。
(プロトコルがなんなのかは現段階で理解できていないが、気にしない♪)
// ここまで省略 @protocol JASidePanelControlDelegate; // ここを追加しました typedef enum _JASidePanelStyle { JASidePanelSingleActive = 0, JASidePanelMultipleActive } JASidePanelStyle; typedef enum _JASidePanelState { JASidePanelCenterVisible = 1, JASidePanelLeftVisible, JASidePanelRightVisible } JASidePanelState; @interface JASidePanelController : UIViewController#pragma mark - Usage /* ここからずっと下まで省略 */ // Containers for the panels. @property (nonatomic, strong, readonly) UIView *leftPanelContainer; @property (nonatomic, strong, readonly) UIView *rightPanelContainer; @property (nonatomic, strong, readonly) UIView *centerPanelContainer; @property (nonatomic, assign) id delegate; // これを追加しました @end /************ ここから下のコードも追加しました ************/ @protocol JASidePanelControlDelegate @optional - (void) JASidePanelControl:(JASidePanelController *)controller leftMenuVisible:(UIViewController *)viewController; @end
3. 左メニューが表示されるところでデリゲートを呼び出す。
僕はここにこう書きました。- (void)toggleLeftPanel:(__unused id)sender { NSLog(@"%@", _visiblePanel); if (self.state == JASidePanelLeftVisible) { [self _showCenterPanel:YES bounce:NO]; } else if (self.state == JASidePanelCenterVisible) { [self.delegate JASidePanelControl:self leftMenuVisible:_leftPanel]; // ここを追加 [self _showLeftPanel:YES bounce:NO]; } }
4. 最後にJASidePanelControllerのサブクラスでデリゲートを設定しデリゲートメソッドを埋める
// ~省略~ - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.delegate = self; } // ~省略~ - (void) JASidePanelControl:(JASidePanelController *)controller leftMenuVisible:(UIViewController *)viewController { leftMenuViewController *leftMenu = (leftMenuViewController *)viewController; [leftMenu.table reloadData]; }
多分、これでこれから表示されるViewControllerのメソッドを実行できるはず。
それよりも、はてなブログってすごいな。
あっちにコードがものすごくきれいに表示される。これからあそこをメインにしようっと。
でけたーーー!!驚きです。
No comments:
Post a Comment