Viewのタッチを別のオブジェクトへ伝える - -performSelector:withObject:

Viewのタッチイベントをトリガーにして、別のオブジェクトでアクションを発生させる方法の一つ。

NSObjectで定義される-performSelector:withObjectメッソドを利用する。
タッチイベントを検出したいViewのid型インスタンス変数targetにアクションを起こしたいオブジェクトを格納し、ViewのSEL型インスタンス変数actionにオブジェクトのメソッドを格納する。


MyViewController.h
#import <UIKit/UIKit.h>
#import "MyView.h"

@interface MyViewController : UIViewController

@property MyView* myView;

@end

MyViewController.m
#import "MyViewController.h"

@interface MyViewController ()

@end

@implementation MyViewController
@synthesize myView;

- (void)viewDidLoad
{
    [super viewDidLoad];
 myView = [[MyView alloc] initWithFrame:CGRectMake(10, 10, 200, 200)];
    myView.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:myView];
    
    myView.target = self;
    myView.action = @selector(touched);
}

- (void)touched
{
    NSLog(@"----ログ2----");
}

@end


MyView.h
#import <UIKit/UIKit.h>

@interface MyView : UIView

@property id target;
@property SEL action;

@end


MyView.m
#import "MyView.h"

@implementation MyView
@synthesize target, action;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        
    }
    return self;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"----ログ1----");
    [target performSelector:action];
}

@end


コメント