iOS5上奇怪的UIButton行为

时间:2013-05-31 13:04:23

标签: ios cocoa-touch uiview uibutton

我创建了一个UIButton,并将其放在我UIImageViewUIScrollView的顶部。我将按钮添加到图像中:

backgroundImage.frame = CGRectMake(0, 0, backgroundImage.frame.size.width, mainTextView.frame.origin.y + mainTextView.frame.size.height + bottomMargin + attachBlockHeight);
        [self insertSubview:backgroundImage atIndex:0];

        UIButton *tmpButton = [[UIButton alloc] initWithFrame:CGRectMake(0, imgGreyLine.frame.origin.y + imgGreyLine.frame.size.height, backgroundImage.frame.size.width, attachBlockHeight)]; 
        [tmpButton addTarget:self action:@selector(btnAttachClicked) forControlEvents:(UIControlEventTouchUpInside)];
        //tmpButton.backgroundColor = [UIColor redColor];
        [backgroundImage addSubview:tmpButton];

按钮在iOS6及以上的按键效果非常好 - 它就在那里,接收触摸事件并完成它必须做的事情。

然而,在iOS5我遇到了一个非常奇怪的行为 - 按钮的frame保持完全相同,按钮显然出现在view上,但它当我向左或向右滑动时,只有才会收到触摸事件。此外,按钮顶部没有其他UIViews靠近!

它可能是什么原因?我完全不知道在这里发现了这个错误。

编辑:事实证明滑动UIButton也适用于iOS6,但事实是触摸事件也已注册。

3 个答案:

答案 0 :(得分:1)

您无法将UI按钮添加为UIImageview的子视图。将其添加到滚动视图或UIimageview的超级视图

答案 1 :(得分:1)

我认为做你想做的事的正确方法是使用带有imageview和按钮的UIView作为兄弟姐妹/孩子。确保在imageview上禁用用户交互,你应该很好。

答案 2 :(得分:1)

您需要在UIImageView父级

上启用用户交互

例如:

UIImageView *backgroundImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[backgroundImage setBackgroundColor:[UIColor yellowColor]];
[backgroundImage setUserInteractionEnabled:YES];
[self.view addSubview:backgroundImage];

UIButton *tmpButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0,50,50)];
[tmpButton addTarget:self action:@selector(btnAttachClicked) forControlEvents:(UIControlEventTouchUpInside)];
tmpButton.backgroundColor = [UIColor redColor];
[backgroundImage addSubview:tmpButton];