开发者

UIPickerView inside UITableView.tableFooterView doesn't receive drag touches

I have a UIPickerView in the footer of a table (from which I plan to issue "pagination"-style requests for the table--the picker will list the pages available of the LARGE data set I'm navigating, and let the user jump straight to any "page" of the data).

My picker receives taps; if I tap on a row of the picker that isn't the selected one, it rolls into the center space of the picker. 开发者_开发问答But if I drag my finger on the picker, I scroll the TABLE, not the picker contents.

I tried installing a UIView subclass in my tableFooterView to see if I could catch touches, and I can... but not touches on the picker. Touches AROUND the picker do in fact fire that UIView subclass's -touchesBegan. But not ones on the picker itself.


Here's what ended up working.

I made my table into a subclass of UITableView (called PickerSensitiveUITableView).

The I implemented this method:

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    UIView* result = [super hitTest:point withEvent:event];

    if ([result.superview isKindOfClass:[UIPickerView class]])
    {
          self.scrollEnabled = NO;
    }
    else 
    {
          self.scrollEnabled = YES;    
    }
    return result;
}

So now when the touch happens inside the bounds of the picker (actually ANY picker in the table!) it turns off the scrollability of the UITableView.

It occurs to me a more general solution would be to do this as a category on UIScrollView. The problem isn't with tables so much as with the UIScrollView that UITableView is a subclass of...

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜