1

我在 UIView 中有一个 UITableView,其中 UIView 充当上拉视图。我想在屏幕上上下拖动视图,并让视图随着我的拖动而向上移动。

如果我正在触摸 UITableView 部分,那么我想向上拖动直到 UIView 达到某个上限,然后我的拖动开始向上拖动 UITableView。

如果 UIView 处于其上限并且我在 UITableView 上向下拖动,那么我希望 UITableView 向下拖动直到它到达它的开头,然后将拖动转移到 UIView,将它与 UITableView 一起向下拖动到屏幕上.

此外,UITableVIew 具有需要继续对按下做出反应的按钮,因此我不能在需要时简单地关闭 tableview 的用户交互性。

目前,当 UIView 位于其顶部停车位置时,我正在设置一个标志,然后在扩展的 UITableView 类中使用以下方法

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{


    CGPoint then = [[touches anyObject] previousLocationInView: self];
    CGPoint now = [[touches anyObject] locationInView: self];
    //CGFloat deltaY = fabs(then.y - now.y);

    if(self.contentOffset.y == 0 && now.y > then.y)
        inSlideMode_ = YES;

    if(inSlideMode_)
    {
        [self.nextResponder touchesMoved:touches withEvent:event];
    }
    else
    {
        [super touchesMoved:touches withEvent:event];
    }
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

    CGPoint then = [[touches anyObject] previousLocationInView: self];
    CGPoint now = [[touches anyObject] locationInView: self];
    //CGFloat deltaY = fabs(then.y - now.y);

    if(self.contentOffset.y == 0 && now.y > then.y)
        inSlideMode_ = YES;


    if (inSlideMode_)
    {
        //forwarding action:
        [self.nextResponder touchesBegan:touches withEvent:event];
    }
    else
    {
        [super touchesBegan:touches withEvent:event];
    }
}



-( void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{


    if(inSlideMode_)
    {
        [self.nextResponder touchesEnded:touches withEvent:event];
    }
    else
    {
        [super touchesEnded:touches withEvent:event];
    }

    previousTouchY_ =UNTOUCHED_Y_POSITION;
}


    -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{

    if (scrollView.contentOffset.y <= 0)
    {
        self.scrollEnabled = NO; // if we reach the top of scrolling then should switch     tableview  into the pullup interactor
        self.inSlideMode = YES;

    }
}

在 UIView 扩展类中,我重写了相同的方法来处理拖动,并查看它是否停靠在顶部。

目前它几乎可以工作,但是当拖动 UITableView 时,一旦它到达底部,我需要抬起手指并再次开始拖动它以使 UIView 被向下拖动。有什么建议么???谢谢

4

0 回答 0