自定义Cell中添加Button后的事件处理
2017-02-23 本文已影响285人
ShenYj
在论坛上看到这样一条需求:
UITableViewCell上面放Unbutton ,btn点击事件禁止情况下点击btn,会响应cell的点击事件。项目需求是cell和btn的点击事件各自干各自的事情。 怎么让btn 在禁止点击时候,点击btn,cell事件不响应。求思路。。。
暂时想到一个方法:
1.自定义TableViewCell
2.重写- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
方法
3.如果point在子视图Button之上,并且Button的交互为NO状态,直接返回NO,欺骗系统不在Cell之上
示例代码:
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
BOOL isInside = [super pointInside:point withEvent:event];
for (UIView *subView in self.subviews.reverseObjectEnumerator) {
// 获取Cell中的ContentView
if ([subView isKindOfClass:NSClassFromString(@"UITableViewCellContentView")]) {
for (UIView *sSubView in subView.subviews.reverseObjectEnumerator) {
// 获取ContentView中的Button子视图
if ([sSubView isKindOfClass:[UIButton class]]) {
// point是否在子视图Button之上
BOOL isInSubBtnView = CGRectContainsPoint(sSubView.frame, point);
// 子视图Button的交互功能是否禁用
BOOL isButtonUserInteractionDisabled = sSubView.userInteractionEnabled ? NO : YES;
isInside = isInSubBtnView && isButtonUserInteractionDisabled ? NO : YES;
}
}
}
}
return isInside;
}