3

我正在尝试设计一个视图,其中包含要订购并放入数组的项目列表。这些项目是动态生成的,因此冷量会超出屏幕底部。

出于这个原因,我的第一个视图是一个UIScrollview包含整个设备屏幕的视图,嵌套在这个下面我有一个标签,解释列表的用途以及如何与之交互,然后使用来自http://UITableView的委托方法进行拖放b2cloud.com.au/how-to-guides/reordering-a-uitableviewcell-from-any-touch-point

我面临的问题是,虽然脚本在有 1 或 2 行时运行良好,但当内容UIscrollview大小大于屏幕时,它似乎优先于拖放导致不可预测的行为。

有没有办法让点击表格优先只编辑单元格并允许用户通过在视图上的其他地方交互来滚动?

谢谢

更新

根据下面的评论,我设法得到:

- (void)viewDidLoad
{
    [super viewDidLoad];
//
//
//

UIPanGestureRecognizer *tapGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(wasPanned:)];
    [self.view addGestureRecognizer:tapGesture];
}
-(void)wasPanned:(UIPanGestureRecognizer *)gesture
{
    CGPoint point = [gesture locationInView:scrollView];
    UIView *isTable = [scrollView hitTest:point withEvent:nil];
    if (gesture.state == UIGestureRecognizerStateBegan)
    {
        if([[[isTable class] description] isEqualToString:@"UITableViewCellReorderControl"])
        {
            NSLog(@"Dragged from within table");
            [scrollView setScrollEnabled: NO];

        }
        else
        {
            [scrollView setScrollEnabled:YES];
        }
    }
    else{
        [scrollView setScrollEnabled:YES];
    }
}

现在,当滚动视图不够长而无法开始滚动时,NSLogs 消息正常但是当滚动视图较长时,它仅在滚动视图尚未开始滚动时才识别手势

更新

我现在让控制台 100% 地识别表格中的触摸并禁用滚动。然而,禁用滚动也会停止拖放功能。有谁知道为什么?

额外代码:

tapGesture.delegate = self;

#pragma mark UIGestureRecognizerDelegate
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}
4

1 回答 1

0

所以我的最终(但不是完美的)解决方案是这样做:

。H

<UIGestureRecognizerDelegate>

.m (viewDidLoad)

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(wasTapped:)];
    [self.view addGestureRecognizer:tapGesture];
    tapGesture.delegate = self;

.m

-(void)wasTapped:(UIPanGestureRecognizer *)gesture
{
    CGPoint point = [gesture locationInView:scrollView];
    UIView *isTable = [scrollView hitTest:point withEvent:nil];
    if (gesture.state == UIGestureRecognizerStateBegan)
    {
        if([[[isTable class] description] isEqualToString:@"UITableViewCellReorderControl"])
        {
            NSLog(@"Dragged from within table");
            [scrollView setScrollEnabled: NO];

        }
        else
        {
            [scrollView setScrollEnabled:YES];
        }
    }
    else{
        [scrollView setScrollEnabled:YES];
    }
}

点击手势比平移手势效果更好,因为平移手势似乎将按住、拖动、停止、拖动识别为两种不同的手势。该功能现在可以正常工作,但是如果您在单元格移动动画开始之前移动手指,它将滚​​动。您还必须等待视图(我可以称之为过度滚动吗?)动画完全停止并且滚动条在它抓取单元格之前消失。

如果有人可以改进它,我将不胜感激:)

于 2013-07-08T14:57:53.833 回答