增加UITableView的命中区域

时间:2012-05-29 15:53:57

标签: objective-c ios uitableview

我正在尝试使用分组样式的UITableView占据iPad宽度的70%左右,因为100%看起来并不好看。这意味着任何一方都有大约150px。

这很好,但我希望屏幕的整个宽度可以滚动。

我尝试了各种各样的内容视图和插图,例如:

self.theTable.contentInset = UIEdgeInsetsMake(0, 150, 0, 150);
self.theTable.contentSize = CGSizeMake(self.theTable.contentSize.width + 300,  self.theTable.contentSize.height);
self.theTable.contentOffset = CGPointMake(-150, 0);

但我不能让它像我想的那样工作。

我需要能够点击两侧的背景(150px左右)并能够通过拖动来滚动表格视图。

基本上,我猜这相当于将滚动视图大小增加150px左右,或者将tableview 150px任意一侧插入。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以覆盖tableView的superview的hitTest:withEvent:方法,并返回tableView以获取所需的点。

或者,您可以覆盖tableView中的hitTest:withEvent:并检查那里的条件。

容器superview hitTest方法的示例。所有事件都将转发到tableView。

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if (![self pointInside:point withEvent:event]) {
        return nil;
    }
    UITableView *tableView = nil;
    for (UIView *v in self.subviews) {
        if ([v isKindOfClass:[UITableView class]]) {
            tableView = v;
            break;
        }
    }

    if (!tableView) {
        return self;
    }

    if (CGRectContainsPoint(tableView.frame, point)) {
        return [tableView hitTest:[self convertPoint:point toView:tableView] withEvent:event];
    } else {
        return tableView;
    }
}