[英]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.