« 青山一丁目 ゆで太郎 | トップページ | 旧車バイク »

2016年2月13日 (土)

【備忘録】 Objective-Cでのdelegate実装

Objective-C delegate の作り方、要点のまとめ

1, 構造
TestViewクラスをTabBarController(親View)から使う
iOS9 / Xcode7での実装例

<br /> 2, TestView.h<br /> #import <UIKit/UIKit.h><br /> @class TestView;<br /> @protocol TestViewDelegate <NSObject> <--- プロトコル定義<br /> @optional<br /> -(void)dismissTestView:(UIButton*)button; <--- optionalメソッド<br /> @end<br /> @interface TestView : UIView<br /> extern const NSInteger testViewTag;<br /> -(TestView*)initWithRect:(CGRect)rect forDrawer:(BOOL)forDrawer; <-- ローカルなメソッド<br /> -(void)didTapOKButton:(UIButton*)button;<br /> @property (nonatomic, weak) id <TestViewDelegate> delegate; <-- delegateをメンバー定義<br /> @end</p> <p>3, TestView.m</p> <p>#import "TestView.h"<br /> @implementation TestView<br /> const NSInteger testiewTag = 9999;<br /> -(TestView*)initWithRect:(CGRect)rect forDrawer:(BOOL)forDrawer{<br /> :<br /> [button addTarget:self action:@selector(didTapOKButton:) forControlEvents:UIControlEventTouchUpInside];<br /> // 注:iOS8の場合はこちらを使って直接TabBarControllerを呼び出す<br /> //[button addTarget:_delegate action:@selector(dismissTutorialView:) forControlEvents:UIControlEventTouchUpInside];<br /> }<br /> // OKボタンの動作<br /> // TestViewのなかでいったんこれを読んでそこからdelegateにひもづける<br /> -(void)didTapOKButton:(UIButton*)button{<br /> // ここでローカルな処理をしてもよい<br /> // 例:NSLogなど<br /> if ([_delegate respondsToSelector:@selector(dismissTestView:)]) {<br /> // 画面非表示処理をデリゲートインスタンス(この場合はTabBarController)に委譲します。<br /> [_delegate dismissTestView:button];<br /> }<br /> }<br /> @end</p> <p>4, TabBarController.h<br /> #import <UIKit/UIKit.h><br /> #import "TestView.h"<br /> @interface TabBarController : UITabBarController<TestViewDelegate></p> <p>@end</p> <p>5, TabBarController.m<br /> @implementation TabBarController<br /> -(void)showTestView<br /> {<br /> TestView* ttView = [[TestView alloc]initWithRect:self.view.bounds forDrawer:NO];<br /> ttView.delegate = self; <-- オブジェクトのdelegateにself(親View)を代入<br /> [self.view addSubview:ttView];<br /> }<br /> // OKボタンの動作<br /> // 実際にViewを削除するのはこちら(親View)から行う<br /> -(void)dismissTestView:(UIButton*)button{<br /> TestView *ttView = (TestView*)[self.view viewWithTag:testViewTag];<br /> [ttView removeFromSuperview];<br /> }<br /> @end<br />
以上

|

« 青山一丁目 ゆで太郎 | トップページ | 旧車バイク »

パソコン・インターネット」カテゴリの記事