我有这个问题让我发疯。我花了几十年时间弄清楚为什么会这样。
我在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 。你们有什么想法我能解决这个问题吗?
谢谢大家
答案 0 :(得分:6)
您的按钮是否会对触摸做出反应?按下后会突出显示吗?
因为听起来您正在将此按钮添加到该视图边界之外的视图中,这会阻止触摸传播到按钮。您必须将该视图的宽度增加到scrollViewWidth + 200 + 36
或更多,或者您需要将按钮放在视图的边界内。向我们展示如何创建添加按钮的视图。
答案 1 :(得分:0)
您应该使用initWithFrame初始化所有这些视图,并且您应该传入有效的帧rects。 试试这个,你喜欢按钮就可以了!
答案 2 :(得分:0)
我认为UIButton应首先获得触摸事件,但我遇到类似的问题,按钮没有按下。我最终做的是在父视图的touchesBegan方法中运行检查以查看它是否触及按钮区域。这在我的情况下也非常有用,因为我能够指定更大的区域,因此按钮更容易按下。然后我就开始关闭按钮的触摸事件。
另一种更容易的方法是将按钮的父视图设置为isUserInteractionEnabled为false,当然只有当你不需要它们才能响应触摸时。
这些只是解决你的问题的想法,不知道如何实际解决它。