如何解决UIScrollview中设置框架后,UIButton不响应
| 我有一个UIScrollView,其内容是使用Interface Builder设计的。它下面有一个带有UIButton的表。如果按钮之前未移动过,则可以正常工作(touchesBegan和TouchUpInside会被调用),但是如果响应内容增长(表变大)而使用\'button.frame = \'进行了移动,则它将停止响应任何接触。 我验证了它前面没有隐藏的视图,甚至使用了BringViewToFront。解决方法
检查UIButton的最终位置是否在
UITableView
和UIScrollView
范围内。
将其移动后,UIBUtton
可能会被放置在边界之外,然后将不响应触摸事件。
一种快速设置可以使您验证是否将UITableView
和UIScrollView
的clipToBounds
属性设置为NO
,那么放置在边界之外的所有内容甚至都不可见。
,最近在一个项目中,我有一个UITableView和一个FooterView中的UIButton。当您尝试滚动经过按钮时(因为它是此UITableView中的最后一项),该按钮将固定在视图的底部。
当我的UITableView的内容导致的contentSize小于UITableView的高度时,我遇到了与本帖子相同的问题。我的UIButton本质上超出了UITableView可滚动内容的初始框架的范围,因此没有收到任何事件。
我想发布我的解决方案,以便其他任何接受此行为的人都能得到帮助。
我必须在自定义UITableView类中重写pointInside:withEvent
和hitTest:withEvent
方法:
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
BOOL pointInside = [super pointInside:point withEvent:event];
if (!pointInside) {
CGRect buttonFrame = [self convertRect:self.myButton.frame fromView:self];
if (CGRectContainsPoint(buttonFrame,point)) {
return YES;
}
}
return pointInside;
}
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if (!self.clipsToBounds && !self.hidden && self.alpha > 0) {
for (UIView *subview in self.subviews.reverseObjectEnumerator) {
CGPoint subPoint = [subview convertPoint:point fromView:self];
UIView *result = [subview hitTest:subPoint withEvent:event];
if (result != nil) {
return result;
}
}
}
// No other subviews have triggered this \'touch\' check self.myButton
CGPoint subPoint = [self.myButton convertPoint:point fromView:self];
UIView *result = [self.myButton hitTest:subPoint withEvent:event];
if (result != nil) {
return result;
}
// Pass the \'touch\' on if no subviews trigger the \'touch\'
return [super hitTest:point withEvent:event];
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。