5

我把UIButton里面UITableViewCell放在UITableView那个后面UIScrollView。我将前向接触细分UIScrollViewUITableView.

所以方法 fromUITableViewDelegate didSelectRow正在正确调用。问题是UIButton表格单元格内部没有接收TouchUpInside操作。

如何在不删除ScrollView的情况下解决此问题TableView

编辑:

我通过检测哪个视图将接收触摸解决了这个问题。这是代码:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UIView *hitView = [self hitTest:[(UITouch*)[[touches allObjects] objectAtIndex:0] locationInView:self] withEvent:event];
    if ([hitView isKindOfClass:[UIButton class]]) {
        [(UIButton*)hitView sendActionsForControlEvents:UIControlEventTouchUpInside];
    }
    [super touchesBegan:touches withEvent:event];
}
4

2 回答 2

4

如果您想为 bouth 对象启用操作 - UIScrollView 和 UIButton 您应该为 ScrollView 实现自定义命中测试机制。

在您的 UIScrollView 子类覆盖 - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 方法以使 ScrollView 后面的视图可用于获取事件。

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    return __touchesEnabled;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    _touchesEnabled = NO;
    UIWindow *window = [UIApplication sharedApplication].delegate.window;
    for(UITouch *touch in touches) {
       CGPoint point = [touch locationInView:self];
       point = [window convertPoint:point fromView:self];
       UIView *view = [window hitTest:point withEvent:event];
       [view touchesBegan:touches withEvent:event];
    }  
    _touchesEnabled = YES;
}

这个对我有用

于 2012-12-03T08:00:19.290 回答
0

由于您已经在 UIButton 上添加了滚动视图,因此所有触摸操作都不会传递给按钮。

    [yourScrollView setUserInteractionEnabled:NO];

这可能会解决您的问题。

于 2012-10-09T15:07:01.500 回答