UIView内的UIButton不响应触摸事件

Can*_*ğlu 14 objective-c interface-builder uibutton xib uiview

我已经在自定义UIView中放置了一个UIButton并且该按钮没有接收到任何触摸事件(它没有进入突出显示的状态,所以我的问题在于无法连接内部处理程序中的触摸).我已经尝试将它放入Interface Builder中的XIB中,并尝试以编程方式将UIButton单独添加到UIView中,两者都没有运气.我的所有视图都在UIScrollView中,所以我首先虽然UIScrollView可能会阻止它们,所以我还以编程方式添加了一个按钮,就像我将自定义视图添加到UIScrollView中一样,按钮工作,消除了UIScrollView的可能性是原因.My View的hiearchy是这样的:

SS

按钮位于图像视图上方,前面层没有完全占据我的按钮,所以我没有理由不与按钮进行物理交互.在我的自定义视图的代码端,我正在创建我的视图:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        UIView *sub = [[[NSBundle mainBundle] loadNibNamed:@"ProfileView" owner:self options:nil] objectAtIndex:0];
        [self addSubview:sub];
        [sub setUserInteractionEnabled:YES];
        [self setUserInteractionEnabled:YES];
        CALayer *layer = sub.layer;
        layer.masksToBounds = YES;
        layer.borderWidth = 5.0;
        layer.borderColor = [UIColor whiteColor].CGColor;
        layer.cornerRadius = 30.0;
        /*layer.shadowOffset = CGSizeZero;
        layer.shadowRadius = 20.0;
        layer.shadowColor = [[UIColor blackColor] CGColor];
        layer.shadowOpacity = 0.8;
        */
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了所有的组合setUserInteractionsEnabled,并且没有运气.(是的,也将它们设置为在Interface Builder中检查).我还读了一个类似问题的另一个问题,我应该尝试重写'canBecomeFirstResponder'来返回'YES',我也做了.但问题仍然存在,我无法点击按钮.我没有给按钮任何特殊的属性,设置,它只是一个常规的.我在视图中的其他对象(下面的标签,按钮后面的图像视图等)正常工作没有问题.这可能有什么问题?

谢谢,

能够.

更新:以下是问题的快速复制:https://dl.dropbox.com/u/79632924/Test.zip 尝试运行并单击按钮.

Dmi*_*nko 18

看一下测试项目,我相信你创建TestView的方式有问题,你没有为它指定框架,所以基本上父视图是0大小,你从XIB看到的子视图延伸到父视图之外,因此在响应者链中没有得到任何东西.

您应该在创建TestView时指定帧,或者在加载XIB文件后调整帧.


And*_*rei 5

我也遇到过这个问题.我的原因是UIButtonsuperview框架的高度为0,所以我相信即使触摸发生了,它也没有传递给按钮.

在确保按钮的超级视图采用较大的矩形作为框架后,按钮操作起作用.

我这个问题的根本原因是错误的自动布局实现(我忘了为按钮的superview设置高度约束).