web-dev-qa-db-ja.com

UIImageView内のUIButtonがタップに応答しない

画像をサブビューとして持つ画像ビューを持つスクロールビューがあり、画像ビューにはそのサブビューの1つとしてUIButtonがあります。問題は、ボタンをクリックできないことです。ボタンは見えますが、タップできません。

誰かが私が台無しにしているのは何ですか?どんな助けでも大歓迎です!ありがとう!

以下はコードです:

scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];    
imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"img.jpg"]];
scrollView.delegate = self;
self.view = scrollView;

// add invisible buttons
[self addInvisibleButtons];
[scrollView addSubview:imageView];

addInvisibleButtonsのコードは次のとおりです。

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(buttonHandler) forControlEvents:UIControlEventAllEvents];
[button setTitle:@"point" forState:UIControlStateNormal];
button.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
[self.imageView addSubview:button];
31
Ravi

UIImageViewのデフォルトではuserInteractionEnabledNO/falseに設定されています。

ボタンをサブビューとして画像ビューに追加しています。 YES/trueに設定する必要があります。

91

なぜ目に見えないUIButtonsUIImageViewに追加するのですか?

悪い習慣のようです。Interface BuilderではUIButtonを追加できないことに注意してください。

タッチ処理のある画像が必要な場合は、次のことができます。

UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(buttonHandler) forControlEvents:UIControlEventAllEvents];
[button setTitle:@"point" forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"img.jpg"] forState:UIControlStateNormal];
[button setFrame:CGRectMake(0.0, 0.0, 40.0, 40.0)];

[scrollView addSubview:button];
4
Desdenova

addInvisibleButtons実装を次のようにすることができます

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundColor:[UIColor clearColor]];
[button addTarget:self action:@selector(buttonHandler) forControlEvents:UIControlEventAllEvents];
[button setTitle:@"point" forState:UIControlStateNormal];
button.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
self.imageView.userInteractionEnabled = YES;
[self.imageView addSubview:button];

UIButtonを完全に非表示にしたい場合は、UIButtonにテキストを表示して表示するため、[button setTitle:@"point" forState:UIControlStateNormal];の行を削除する必要があります。

これで問題が解決する場合があります。

2
silentBeep