在UIScrollView中拖放

时间:2013-07-04 09:27:04

标签: ios objective-c uiscrollview

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

出于这个原因,我的第一个视图是UIScrollview,它占据整个设备的屏幕 嵌套在这下面我有一个标签,解释列表的内容以及如何与它进行交互,然后使用拖动和放大UITableView。使用http://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];
    }
}

现在,当滚动视图不够长以开始滚动时,NS记录消息正常 但是,当滚动视图较长时,如果滚动视图尚未开始滚动

,则仅识别手势

更新

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

额外代码:

tapGesture.delegate = self;

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

1 个答案:

答案 0 :(得分: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];
    }
}

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

如果有人能改进它,我会很感激:)