左のメニューが表示されるさいに、その中のtableviewを更新したいなーと思っていたので、ごちゃごちゃやってたら出来ました。
参考にしたのは以下の二つのリンク
→
逆引きObjective-C for iPhoneアプリ - デリゲートを自作クラスに実装する
→
[iOS] Protocol – Delegateパターン | Objective-C イベント伝達 その1 « きんくまデザイン
以下、その手順です。
1. delegateプロパティをJASidePanelController.hに追加する
以下のコードをJASidePanelController.hに加えます。
@property (nonatomic, assign) id delegate;
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のメソッドを実行できるはず。
それよりも、はてなブログってすごいな。
あっちにコードがものすごくきれいに表示される。これからあそこをメインにしようっと。
でけたーーー!!驚きです。