私は、チャットルーム領域をタップしてpreviewCancelButtonへのタッチを防止またはブロックする際に、キーボードを無効にするためのUITapGestureRecognizerに問題があると思います。InputFunctionView.mUITapGestureRecognizerがサブビュー内のUIButtonのタッチイベントをブロックします
BaseTemplateVC.m
- (void)addDismissKeyboardGesture {
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard:)];
tapGesture.cancelsTouchesInView = NO;
tapGesture.delegate = self;
self.view.tag = 111;
[self.view addGestureRecognizer:tapGesture];
}
- (void) dismissKeyboard:(id)sender {
UITapGestureRecognizer *gesture = sender;
UIView *view = gesture.view;
NSLog(@"%ld", (long)view.tag);
[self.view endEditing:YES];
}
ChatroomVC.m
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
//Disallow recognition of tap gestures in the segmented control.
if (([touch.view isKindOfClass:[UIButton class]])) {
NSLog(@"noooooooo");
return NO;
}
return YES;
NSLog(@"yesssssss");
}
:ここでは以下の私の関連するコードです
- (void)selectedSticker:(NSString *)stickerURLString { /* Sticker preview subview */ stickerPreviewView = [[UIImageView alloc] initWithFrame:CGRectMake(0, -120, FrameWidth, 120)]; stickerPreviewView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5f]; stickerPreviewView.userInteractionEnabled = YES; [self addSubview:stickerPreviewView]; [self bringSubviewToFront:stickerPreviewView]; /* Initialise previewCancelButton */ self.previewCancelButton = [UIButton buttonWithType:UIButtonTypeCustom]; self.previewCancelButton.frame = CGRectMake(Main_Screen_Width-30, SpaceForItems-120, 20, 20); [self.previewCancelButton setBackgroundImage:[UIImage imageNamed:@"btn_previewcancel.png"] forState:UIControlStateNormal]; [self.previewCancelButton setBackgroundImage:[UIImage imageNamed:@"btn_previewcancel.png"] forState:UIControlStateHighlighted]; [self.previewCancelButton addTarget:self action:@selector(cancelStickerPreviewButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview: self.previewCancelButton]; } /* Cancel sticker preview subview */ - (void)cancelStickerPreviewButtonPressed:(id)sender { NSLog(@"cancel sticker preview"); [self.previewCancelButton removeFromSuperview]; [stickerPreviewView removeFromSuperview]; }
これで、previewCancelButtonはstickerPreviewViewの右上隅に正しく表示されますが、touchイベントを受け取ることができません。ボタンをタッチすると、コンソールに「111」と表示され、トレースバックするとaddDismissKeyboardGestureメソッドが含まれているBaseTemplateVC.mが見つかったため、この問題が発生する可能性があります。 誰かが私にいくつかの解決策を導くことができます。それは本当に感謝しています。前もって感謝します。
進捗状況:私はChatroomVC.mにgestureRecognizer方法を変更したをので、今ではボタンをタップジェスチャーを無視することができますが、問題は発生しませんボタンのアクションのまま。
あなたはジェスチャーアクション機能でタップエリアを確認することができますし、プログラム的.sendAction' 'でボタンを押すと、それがボタン領域 – Tj3n
にかどうrightaway返します@ Tj3nボタンのタップ領域を確認する方法がわかりません。あなたはコードで私を見せることができるので、私はあなたが意味することを正確に理解することができますか?ありがとう。 – SanitLee
あなたはyesにバインドされたクリップをチェックして、それがあなたのボタンであることを確認してください。 –