আমার কাছে একটি ভিউ হায়ারার্কি রয়েছে যা দেখতে এরকম কিছু দেখাচ্ছে:
UIView (A)
UIView > UIImageView
UIView > UIView (B)
UIView > UIView (B) > Rounded Rect Button
UIView > UIView (B) > UIImageView
UIView > UIView (B) > UILabel
আমি আমার ইউআইভিউ (বি) এর সাথে অঙ্গভঙ্গি সনাক্তকারী (গুলি) সংযুক্ত করেছি। যে সমস্যার মুখোমুখি হচ্ছি তা হ'ল আমি ইউআইভিউ (বি) এর ভিতরে থাকা বৃত্তাকার রেক্ট বোতামটির জন্য কোনও পদক্ষেপ গ্রহণ করি না। সিঙ্গলট্যাপ অঙ্গভঙ্গি সনাক্তকারী বাটনটির টাচ আপ ইনসাইড ইভেন্টটি ক্যাপচার / ওভাররাইড করে।
আমি কীভাবে এটি কাজ করতে পারি? আমি ভেবেছিলাম যে প্রতিক্রিয়াশীল চেইন শ্রেণিবিন্যাস নিশ্চিত করবে যে বোতাম টাচের ইভেন্টটিকে অগ্রাধিকার দেওয়া হবে এবং এটি ট্রিগার হয়ে উঠবে! আমি কী মিস করছি?
এখানে কিছু সম্পর্কিত কোড রয়েছে:
#pragma mark -
#pragma mark View lifecycle (Gesture recognizer setup)
- (void)viewDidLoad {
[super viewDidLoad];
// double tap gesture recognizer
UITapGestureRecognizer *dtapGestureRecognize = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapGestureRecognizer:)];
dtapGestureRecognize.delegate = self;
dtapGestureRecognize.numberOfTapsRequired = 2;
[self.viewB addGestureRecognizer:dtapGestureRecognize];
// single tap gesture recognizer
UITapGestureRecognizer *tapGestureRecognize = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureRecognizer:)];
tapGestureRecognize.delegate = self;
tapGestureRecognize.numberOfTapsRequired = 1;
[tapGestureRecognize requireGestureRecognizerToFail:dtapGestureRecognize];
[self.viewB addGestureRecognizer:tapGestureRecognize];
// add gesture recodgnizer to the grid view to start the edit mode
UILongPressGestureRecognizer *pahGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGestureRecognizerStateChanged:)];
pahGestureRecognizer.delegate = self;
pahGestureRecognizer.minimumPressDuration = 0.5;
[self.viewB addGestureRecognizer:pahGestureRecognizer];
[dtapGestureRecognize release];
[tapGestureRecognize release];
[pahGestureRecognizer release];
}
#pragma mark -
#pragma mark Button actions
- (IBAction)buttonTouchUpInside:(id)sender {
NSLog(@"%s, %@", __FUNCTION__, sender);
}
#pragma mark -
#pragma mark Gesture recognizer actions
- (void)singleTapGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
NSLog(@"%s", __FUNCTION__);
}
- (void)doubleTapGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
NSLog(@"%s", __FUNCTION__);
}
- (void)longPressGestureRecognizerStateChanged:(UIGestureRecognizer *)gestureRecognizer {
switch (gestureRecognizer.state) {
case UIGestureRecognizerStateEnded: {
NSLog(@"%s", __FUNCTION__);
break;
}
default:
break;
}
}