簡體   English   中英

如果將UIButton作為子視圖添加到UIImageView,則單擊UIButton不起作用

[英]Click on UIButton Does Not Work if it's Added as Subview to UIImageView

我有一個動畫的簡單UIImageView ,我需要檢測它的輕敲。 我添加了一個UIButton ,它是此UIImageView的子視圖。 但是,點擊它不起作用。 添加到視圖中時,我已經測試了UIButton本身,並且它可以工作,所以不是導致問題的按鈕。

這是代碼:

self.red = [[UIImageView alloc] initWithFrame:CGRectMake(50, 300, 85, 100)];
self.red.image = [UIImage imageNamed:@"red.png"];

[self.red setUserInteractionEnabled: YES];
[self.view addSubview: self.red];
[self.view bringSubviewToFront:self.red]; 

UIButton *redButton = [UIButton buttonWithType: UIButtonTypeCustom];
redButton.frame = CGRectMake(self.red.frame.origin.x, self.red.frame.origin.y, self.red.frame.size.width, self.red.frame.size.height);
[redButton addTarget: self action:@selector(correctButtonClick) forControlEvents: UIControlEventAllTouchEvents];
[redButton setUserInteractionEnabled:YES];

[self.red addSubview: redButton];
[self.red bringSubviewToFront:redButton]; 

我在這里做錯了什么?

代替此行, redButton.frame = CGRectMake(self.red.frame.origin.x, self.red.frame.origin.y, self.red.frame.size.width, self.red.frame.size.height); 嘗試這個

redButton.frame = CGRectMake(0,0, self.red.frame.size.width, self.red.frame.size.height); 

編輯:此行[self.red bringSubviewToFront:redButton]; 不需要。

代替將UIButton作為子視圖插入,請使用UITapGestureRecognizer ,例如:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(correctButtonClick)];
[self.red addGestureRecognizer:tap];

您要做的是反轉實現,將UIButton添加到UIImageView中不是一個好主意,而是以編程方式創建自定義樣式的UIButton並將UIImageView添加為其子視圖,這樣肯定可以

編輯:至於您當前的實現,您已經在UIImageView中添加了UIButton,所以您可能希望圖像的每個部分都接受click事件,在這種情況下,UIButton的x和y坐標將是0,0而不是red.x和red .y,但是寬度和高度正確

只需執行self.red.userInteractionEnabled = YES。

UIImageView的userInteractionEnabled默認為NO。

自定義按鈕沒有UI。 因此您無法選擇它。 (您可以使用綁定按鈕嘗試,或向按鈕添加一些圖像並將按鈕的alpha設置為0.1或其他)

@tkanzakic答案應該是正確的。 只需將TapGestureRecognizer添加到ImageView或將圖像添加到Button。

除了使用單獨的imageview和Button之外,還可以使用 Button 中的imageview屬性 這將解決您所有的問題,並使您不必編寫額外的代碼行。

UIButton *redButton = [UIButton buttonWithType: UIButtonTypeCustom];

redButton.imageView.image = [UIImage imageNamed:@“ red.png”];

redButton.frame = CGRectMake(50, 300, 85, 100);
[redButton addTarget: self action:@selector(correctButtonClick) forControlEvents: UIControlEventAllTouchEvents];
[redButton setUserInteractionEnabled:YES];

[self.red addSubview: redButton];

很簡單,按鈕沒有響應,因為它的框架不正確,所以它不在您認為的位置。 基本上在下面更改您的行:

redButton.frame = CGRectMake(self.red.frame.origin.x, self.red.frame.origin.y, self.red.frame.size.width, self.red.frame.size.height);

有了這個:

redButton.frame = CGRectMake(self.red.bounds.origin.x, self.red.bounds.origin.y, self.red.frame.size.width, self.red.frame.size.height);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM