iOS5 上奇怪的 UIButton 行为

Posted

技术标签:

【中文标题】iOS5 上奇怪的 UIButton 行为【英文标题】:Strange UIButton behaviour on iOS5 【发布时间】:2013-05-31 13:04:22 【问题描述】:

我创建了一个UIButton 并将它放在我放在UIScrollView 上的UIImageView 之上。我将按钮添加到图像中,如下所示:

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,但问题是触摸事件也被注册了。

【问题讨论】:

此场景中涉及的任何手势识别器? @Stavash 不,没有一个 视图层次结构中发生了什么?我看到你在所有其他视图下插入 UIImageView 我认为问题在于 AutoResizeSubview 复选框。请取消选中所有 autoresizesubview 复选框。 @Stavash 我将自定义 UIView 添加到 UIScrollView。这个视图包含 index:0 处的图像、一个标签和一个 UIButton。这就是它的工作原理 【参考方案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];

【讨论】:

没关系,我仍然看不到它在一个系统中如何工作并在另一个系统中改变行为。这里不可能有一些 userInteraction BOOL。【参考方案2】:

您不能将 UIbutton 添加为 UIImageview 的子视图。将其添加到滚动视图或 UIimageview 的超级视图中

【讨论】:

看在上帝的份上,为什么我不能呢?即使我将它添加到 UIImageView 的超级视图中,也没有任何变化,正如预期的那样。 你能贴出你的按钮@SergiusGee的目标方法吗 这不会有任何区别,但是给你 - -(void)btnAttachClicked NSLog(@"CLICKED!!!"); 【参考方案3】:

我认为做你想做的事情的正确方法是让 UIView 与 imageview 和按钮作为兄弟姐妹/孩子。确保禁用图像视图上的用户交互,你应该很好。

【讨论】:

我确实禁用了用户交互,甚至在将 UIButton 添加到 UIImageView 的超级视图之后 - 承载所有这些的 UIView 并且添加到 UIScrollView - 没有任何效果!

以上是关于iOS5 上奇怪的 UIButton 行为的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 子类中的 imageview.transform 奇怪的行为

将 UIButton 添加到 UICollectionViewCell 时的奇怪行为

iOS UIButton Touch-Up-Inside 奇怪的行为

在 prepareForSegue 上为 Popover Segue 传递数据:iOS 5 中的奇怪行为

iOS 5:在 TextField 之间跳转时出现奇怪的行为

在 UIButton 上同时显示图像和标题 - Swift 3