【備忘録】 Objective-Cでのdelegate実装
Objective-C delegate の作り方、要点のまとめ
1, 構造
TestViewクラスをTabBarController(親View)から使う
iOS9 / Xcode7での実装例
2, TestView.h
#import
@class TestView;
@protocol TestViewDelegate
@optional
-(void)dismissTestView:(UIButton*)button; <--- optionalメソッド
@end
@interface TestView : UIView
extern const NSInteger testViewTag;
-(TestView*)initWithRect:(CGRect)rect forDrawer:(BOOL)forDrawer; <-- ローカルなメソッド
-(void)didTapOKButton:(UIButton*)button;
@property (nonatomic, weak) id
@end
3, TestView.m
#import "TestView.h"
@implementation TestView
const NSInteger testiewTag = 9999;
-(TestView*)initWithRect:(CGRect)rect forDrawer:(BOOL)forDrawer{
:
[button addTarget:self action:@selector(didTapOKButton:) forControlEvents:UIControlEventTouchUpInside];
// 注:iOS8の場合はこちらを使って直接TabBarControllerを呼び出す
//[button addTarget:_delegate action:@selector(dismissTutorialView:) forControlEvents:UIControlEventTouchUpInside];
}
// OKボタンの動作
// TestViewのなかでいったんこれを読んでそこからdelegateにひもづける
-(void)didTapOKButton:(UIButton*)button{
// ここでローカルな処理をしてもよい
// 例:NSLogなど
if ([_delegate respondsToSelector:@selector(dismissTestView:)]) {
// 画面非表示処理をデリゲートインスタンス(この場合はTabBarController)に委譲します。
[_delegate dismissTestView:button];
}
}
@end
4, TabBarController.h
#import
#import "TestView.h"
@interface TabBarController : UITabBarController
@end
5, TabBarController.m
@implementation TabBarController
-(void)showTestView
{
TestView* ttView = [[TestView alloc]initWithRect:self.view.bounds forDrawer:NO];
ttView.delegate = self; <-- オブジェクトのdelegateにself(親View)を代入
[self.view addSubview:ttView];
}
// OKボタンの動作
// 実際にViewを削除するのはこちら(親View)から行う
-(void)dismissTestView:(UIButton*)button{
TestView *ttView = (TestView*)[self.view viewWithTag:testViewTag];
[ttView removeFromSuperview];
}
@end
以上
| 固定リンク
「パソコン・インターネット」カテゴリの記事
- TypeScriptあるいはES6(2016.07.03)
- 【備忘録】 Cordova でXcodeにエラーが出る(2016.05.20)
- キーボード交換(2016.04.23)
- 蕎麦道なび、Windows10 PCでも使えますよ(2016.02.22)
- AngularJSについて(2016.02.21)







最近のコメント