複数のUIViewのうちどのUIViewがtouchesBeganされたかを調べる方法

今回の内容は表題のとおりです。あまり他のサイトでいい記事がなかったので書いておこうと思います。

あるUIViewに

 

@property (strong, nonatomic) UIView *viewA;

@property (strong, nonatomic) UIView *viewB;

@property (strong, nonatomic) UIView *viewC;

 

という3つのUIViewがaddSubviewされていたとして、

UIResponderクラスのメソッドである

 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

 

において、どのUIViewがタッチされたのかを調べたいということがあった。方法は以下になります。

UIEventクラスに

 

- (NSSet *)touchesForView:(UIView *)view

 

というメソッドがあるので、それぞれのUIViewを引数に、戻り値がnullかそうでないかで判定する。

具体的には、

 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    

    if([event touchesForView:_viewA] != NULL) {

        NSLog(@"_viewA");

    } else if([event touchesForView:_viewB] != NULL) {

        NSLog(@"_viewB");

    } else if([event touchesForView:_viewC] != NULL) {

        NSLog(@"_viewC");

    }

    

}

 

戻り値がnullでないなら引数に指定したUIViewは存在するということになるので、そのUIViewがタッチされたということになる。