自定义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;
}
上一篇 下一篇

猜你喜欢

热点阅读