Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UIButton在UIImageView';s帧区域_Iphone_Ios_Ipad_Uiimageview_Uibutton - Fatal编程技术网

Iphone UIButton在UIImageView';s帧区域

Iphone UIButton在UIImageView';s帧区域,iphone,ios,ipad,uiimageview,uibutton,Iphone,Ios,Ipad,Uiimageview,Uibutton,这是我的视图层次结构:parentView(UIView)有一个UIImageView作为其子视图,而UIImageView又有一个UIButton作为其子视图 left = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"left.png"]]; left.userInteractionEnabled = YES; [parentView addSubview:left]; back = [UIButton buttonWit

这是我的视图层次结构:parentView(UIView)有一个UIImageView作为其子视图,而UIImageView又有一个UIButton作为其子视图

left = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"left.png"]];
left.userInteractionEnabled = YES;
[parentView addSubview:left];

back = [UIButton buttonWithType:UIButtonTypeCustom];
[back setImage:[UIImage imageNamed:@"Arrow-left.png"] forState:UIControlStateNormal];
[back addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside];
back.showsTouchWhenHighlighted = YES;
[left addSubview:back];
一切正常显示,但按钮对触摸没有反应。如果我将其帧从UIImageView的帧中移到其他位置,并将其设置为父视图(UIView)的子视图,它会做出响应。但事情是这样的


即使我设置为parentView的子视图,如果按钮位于UIImageView的帧区域内,按钮也不会响应。已将图像视图的userInteractionEnabled属性设置为“是”。知道发生了什么吗?

UIImageView关闭用户交互-打开它,按钮就会工作

编辑:

因此,我几乎完全按照所写的那样使用了您的代码——有一点令人费解,那就是您说一切看起来都很好。对我来说,自定义按钮的帧为0,0,0,0,因此我什么也看不到。当我设置框架时,一切都很完美:

    UIButton *back = [UIButton buttonWithType:UIButtonTypeCustom];
    UIImage *image = [UIImage imageNamed:@"46-truck.png"];
    assert(image);

    [back setImage:image forState:UIControlStateNormal];
    [back addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
    back.showsTouchWhenHighlighted = YES;
    back.frame = (CGRect){ {0,0}, image.size};

NSLog(@"FRAME: %@", NSStringFromCGRect(back.frame) );
    [imageView addSubview:back];
因此,如果您需要在运行时探测SuperView以找出什么是什么,您可以使用下面的代码。[UIView DumpSuperView:back消息:@“该死的树皮按钮”]

把这一行放在最后。

也许吧

parentView.userInteractionEnabled = YES;

或父视图框太小,无法按住按钮或图像视图。检查父视图的大小

我以前也遇到过这种情况。。我认为这是一个吞噬事件的超级视图


我知道您已经说过,只有当它与图像视图不重叠时,才能将其添加到父视图中。如果在图像视图上禁用用户交互,按钮事件是否会在添加到父视图时持续触发?

您实际上需要设置
userInteractionEnabled=NO
,以允许触摸通过


摘自

如果你阅读了代码和问题的最后一部分,他已经启用了它
left.userInteractionEnabled=YES啊,是的,我仓促下结论,没有看到那一行:-(.这很常见。不管怎样,父视图是否启用了userInteractionEnabled?我从来没有在imageView中添加过按钮,但我添加了一个手势识别器。我已经用另一种方法正确设置了帧,用于设置屏幕中所有视图的帧。因此,它也显示在正确的帧上。我的观点是-我创建了一个UIImageView,将其添加到视图中,然后在代码中创建了与您完全相同的按钮,将其添加到ImageView中,并且它工作得非常完美。因此,这方面的内容比您公开的要多。另一个视图覆盖了ImageView阻止事件等。转储视图层次结构-我将向我的答案中添加代码。返回的代码是什么:。您是否放置了<代码>NSLog
在那里查看它是否真的在触发?你能尝试将按钮添加到
父视图中而不是
左视图中吗?@EricBrotto它已经在我的问题中了。我尝试过这样做,只要按钮不落在imageview的框架区域中,它就可以工作。@Wrightsc问题很明显是说它触发了当放置在图像视图的框架区域外时,会出现错误。这是一个愚蠢的问题,但按钮是否位于图像视图下方?能否将其放置在顶部?parentView是一个
UIView
,因此默认情况下会设置它,而且当按钮与
UIImageView
不重叠时,它似乎可以工作。是的。它可以在移除图像视图的情况下工作。它只是不工作当它是层次结构中的UIView->UIImageView->UIButton时不起作用。无论UIButton是UIImageView的子视图还是UIView的子视图。请澄清,当你说它“仅当”是UIImageView的子视图(UIView->UIImageView->UIButton)时,它也意味着当它是UIView的子视图时不起作用(UIView->UIImageView&UIView->UIButton)?编辑:这只是你最后的评论!=你在OP中所说的。是的。在两种情况下都不起作用。在第二种情况下,只有当按钮的框架被设置在Imageview的窗口之外时,它才起作用,就像
UIImageView
UIButton
得到它之前吃掉了触摸事件。但是我不记得如何修复它,所以rry,正如您所说,您的顺序是正确的,因此我不知道如果按钮位于imageview顶部,为什么imageview会吃掉事件。您可以尝试显式地将
UIButton
移动到前面;
[parentView bringSubviewToFront:back]
。我必须补充的是,我的应用程序中还有一个部分具有类似的场景,但它只是一个带有UIButton子视图的UIImageView。当userInteractionEnabled设置为“是”时,它可以正常工作。当UIView位于该UIImageView后面时,它会停止。啊..不起作用。我正在以适当的层次结构添加视图。我甚至尝试设置zPositions以使用t他正确地为视图分层。即使这样也不起作用。
left.userInteractionEnabled = YES;
parentView.userInteractionEnabled = YES;