UIButton选择器在嵌套的UIViews中不起作用

时间:2012-08-14 13:32:14

标签: iphone ios uiview uiscrollview

我有这个问题让我发疯。我花了几十年时间弄清楚为什么会这样。

我在UIScrollView中有一个UIView scrollView 。在这个scrollView中,我有三个不同的UIView,它们是在运行时创建的。在这三个UIView中的一个中,我创建了一个按钮。这是我的代码。

        UIButton *buttonLike = [UIButton buttonWithType:UIButtonTypeRoundedRect ] ;
        buttonLike.frame =CGRectMake(scrollViewWidth +200, 30,36, 16);
        buttonLike.imageView.image = [UIImage imageNamed:@"like.png"];
        [buttonLike addTarget:self action:@selector(buttonLikePressed:) forControlEvents:UIControlEventTouchUpInside] ;

scrollViewWidth 也是一个常量定义和初始化。
并且,我将此 buttonLike 添加为其中一个UIViews的子视图。但是,无论我做什么, buttonLikePressed 方法都不会调用。 我已经搜索了这个问题并想出了这些解决方案。

Iphone UIButton not working in nested UIViews
iPhone SDK 2: UIButton not working in nested views loaded from nib file

他们描述了同样的问题。但是,作为解决方案,他们使用
来初始化他们的观点 -(id)initWithFrame:(CGRect)aRect方法。好吧,我已经使用initWithFrame方法初始化了我的 UIViews 。你们有什么想法我能解决这个问题吗?

谢谢大家

3 个答案:

答案 0 :(得分:6)

您的按钮是否会对触摸做出反应?按下后会突出显示吗?

因为听起来您正在将此按钮添加到该视图边界之外的视图中,这会阻止触摸传播到按钮。您必须将该视图的宽度增加到scrollViewWidth + 200 + 36或更多,或者您需要将按钮放在视图的边界内。向我们展示如何创建添加按钮的视图。

答案 1 :(得分:0)

您应该使用initWithFrame初始化所有这些视图,并且您应该传入有效的帧rects。 试试这个,你喜欢按钮就可以了!

答案 2 :(得分:0)

我认为UIButton应首先获得触摸事件,但我遇到类似的问题,按钮没有按下。我最终做的是在父视图的touchesBegan方法中运行检查以查看它是否触及按钮区域。这在我的情况下也非常有用,因为我能够指定更大的区域,因此按钮更容易按下。然后我就开始关闭按钮的触摸事件。

另一种更容易的方法是将按钮的父视图设置为isUserInteractionEnabled为false,当然只有当你不需要它们才能响应触摸时。

这些只是解决你的问题的想法,不知道如何实际解决它。