我的观点结构:
UITableView
UITableViewCell
UIScrollView
CustomView
UIButton
问题是UIButton在我触摸它时不起作用。我用代码创建它:
btn = [[UIButton alloc] init];
[btn setImage:image forState:UIControlStateNormal];
[btn addTarget:self action:@selector(tileTouchUpInside) forControlEvents:UIControlEventTouchUpInside];
btn.layer.zPosition = 1;
[self addSubview:btn];
我还添加了这个:
scroll.delaysContentTouches = NO;
scroll.canCancelContentTouches = NO;
但我的按钮不管用。我不能取消ContentTouches或为UITableView设置延迟,因为如果我设置它,UITableView停止垂直滚动。
感谢您的任何帮助!
9条答案
按热度按时间qqrboqgw1#
将CustomView中的所有子视图添加到ScrollView。并隐藏CustomView。确保CustomView(scrollView的ContainerView)也应该是scrollView的子视图。
bpzcxfmw2#
按钮在滚动视图中不起作用。我花了很多时间与此斗争,并寻求帮助。最后我找到了这个答案:Add buttons to UIScrollView Swift 5 programmatically,其中UIStackView使事情变得简单。
我对解决方案的修改是这样的:
vxf3dgd43#
虎克船长的链接帮了我。我使用UIGestureRecognizer而不是UIButtons。
Allow UIScrollView and its subviews to both respond to a touch使用它,如果你有类似的问题。
pkwftd7m4#
我有同样的问题&相同的层次结构的视图,与最新的sdk,只是使用它:
将同一UITableViewCell中的UIButton的delaysContentTouches设置为NO。
vc9ivgsu5#
创建UIScrollview的子类
如果没有收到该消息,请设置:
问题是由于
touchesShouldCancelInContentView
默认的行为方式,它只在子视图是UIControl时返回NO,但您的按钮隐藏在CustomView中,而不是。uxhixvfz6#
也遇到了同样的情况。UIScrollView在单独的类中,并通过自定义视图添加按钮。“NSNotificationCenter”帮助我解决了这个问题。样本代码:
在包含Scroll View的类中:
为滚动视图、自定义视图和按钮启用用户交互。
xsuvu9jc7#
我猜你需要设置按钮框架。默认情况下,如果使用
btn = [[UIButton alloc] init];
方法初始化按钮,它将是UIButtonTypeCustom
。还设置了一个背景颜色,以调试的目的,记下按钮实际放置的位置。现在,对于您的情况,您需要为该按钮设置框架,如btn.frame = CGRectMake(0,0,100,100);
对于内部UIScrollView,实现此委托方法。
这可能行得通。
1l5u6lss8#
没有一个答案对我有效,因为我的问题是按钮在布局时不可见什么的...
修复:
1)将按钮完全移出
scrollView
(成为VC主view
的子视图)。2)选择
button
和你的contentV
中你想要你的按钮定位的元素(在我的例子中:在conventV中的最后一个元素之后)3)添加必要的约束(在我的示例中:底部对齐)
4)为
button
添加其余的约束。5)好好享受
uklbhaso9#
CustomView的框架可能会干扰UIButton。它们是重叠的吗?将您的按钮添加到CustomView中,只是为了通过
[CustomView addSubview:UIButton];
进行测试(当然使用您的值)。如果它起作用,那么你的问题很可能是重叠。