OStack程序员社区-中国程序员成长平台

标题: iphone - uitableview 单元格中的手势错误 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 20:38
标题: iphone - uitableview 单元格中的手势错误

我的 UITableViewCell 中的 GestureRecognizer 有问题,我有左右滑动手势,长按 2 秒并在表格 View 单元格中捏手势,滑动- 向右滑动下一章,向左滑动查看上一章,捏住重定向到另一个 View Controller ,按住 2 秒以显示弹出窗口( subview )。所有这些都在一个名为 table 的 tableview 中实现。我的问题是一切正常,但是在 tableview 中使用 Gesture 一段时间后,它卡住了 swipeGesture 可能会捏也不起作用。但是当我转到另一个页面并回来时,它开始正常工作。一段时间后它也会卡住。我的代码是如何解决这个问题的?

- (UITableViewCell *)tableViewUITableView *)tableView cellForRowAtIndexPathNSIndexPath *)indexPath {

   static NSString *CellIdentifier = @"Cell";

    readCell *cell = (readCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {

    UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self actionselector(handleSwipeGesture];
    swipeGesture.direction = UISwipeGestureRecognizerDirectionRight; // or whatever
    [table addGestureRecognizer:swipeGesture];
    [swipeGesture release];

    UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc] 
                                          initWithTarget:self actionselector(handleLongPress];
    lpgr.minimumPressDuration = 1.0; //seconds
    lpgr.delegate = self;
    [table addGestureRecognizer:lpgr];
    [lpgr release];

    UISwipeGestureRecognizer *swipeGestureleft = [[UISwipeGestureRecognizer alloc] initWithTarget:self actionselector(handleSwipeGestureleft];
    swipeGestureleft.direction = UISwipeGestureRecognizerDirectionLeft; // or whatever
    [table addGestureRecognizer:swipeGestureleft];
    [swipeGestureleft release];

    UIPinchGestureRecognizer *longPressRecognizer = 
    [[UIPinchGestureRecognizer alloc]
     initWithTarget:self 
     actionselector(longPressDetected];
    [self.view addGestureRecognizer:longPressRecognizer];
    [longPressRecognizer release];

-(void)handleLongPressUILongPressGestureRecognizer *)gestureRecognizer
{
    CGPoint p = [gestureRecognizer locationInView:table];

    NSIndexPath *indexPath = [table indexPathForRowAtPoint:p];
    if (indexPath == nil)
        NSLog(@"long press on table view but not on a row");
    else

        // localStringValueverseno= [tableView cellForRowAtIndexPath:indexPath];
        localStringValueverseno = [(UILabel *)[[table cellForRowAtIndexPath:indexPath]
                                               viewWithTag:1] text];
    localStringValue = [table cellForRowAtIndexPath:indexPath].textLabel.text; 
    _lblmainnotegns.text = localStringValueverseno;
    // localStringValueverseno= [tableView cellForRowAtIndexPath:indexPath].cell.table.chapterAndVerse.text; 
    delegate.selectedIndex=[NSString stringWithFormat"%d",indexPath.row+1];
    [userInfo setObject:[delegate.allSelectedVerseEnglish objectAtIndex:indexPath.row] forKey"text"];
    [userInfo setObject:delegate.selectedBook forKey"book"];
    [userInfo setObject:delegate.selectedChapter forKey"chapter"];
    [userInfo setObject:[NSString stringWithFormat"%d",indexPath.row + 1] forKey"verse"];

    UIView *noteView = (UIView *)[self.view viewWithTag:101]; 
    //ViewWithTag Number should be same as used while allocating
    [noteView removeFromSuperview];
    //For removing View
    UIView *acntView = (UIView *)[self.view viewWithTag:100]; 
    //ViewWithTag Number should be same as used while allocating
    [acntView removeFromSuperview];
    // now you can use cell.textLabel.text
    UIView *noteViewsync = (UIView *)[self.view viewWithTag:105]; 
    //ViewWithTag Number should be same as used while allocating
    [noteViewsync removeFromSuperview];


    if ([notes objectForKey:[NSString stringWithFormat:@"%@ %@:%@",delegate.selectedBook,delegate.selectedChapter,delegate.selectedIndex]] == nil) {
        [notetickimage setHidden:YES];
        [self.view addSubview:MainPopupView];
    }
    if (gestureRecognizer.state==UIGestureRecognizerStateBegan ) {
        self.table.scrollEnabled = NO;
        [table removeGestureRecognizer:gestureRecognizer];
    }
    else if(gestureRecognizer.state==UIGestureRecognizerStateEnded) {
        self.table.scrollEnabled = YES;
        [table removeGestureRecognizer:gestureRecognizer];
    }



        NSLog(@"long press on table view at row %d", indexPath.row);
}
-(void) handleSwipeGestureUISwipeGestureRecognizer*)recognizer {


     if(![delegate.selectedChapter isEqualToString:[NSString stringWithFormat:@"%d",[DbHandler mNumberOfChaptersInBook:delegate.selectedBook]]]) {
         [UIView beginAnimations:nil context:nil];
         [UIView setAnimationDuration:0.4];
         [UIView setAnimationDelay:0.0];
         [UIView setAnimationBeginsFromCurrentState:YES];
         [UIView setAnimationDidStopSelector:@selector(animCompleteHandler:finished:context];
         [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES];
         [UIView commitAnimations];

        // if the currentChapter is the last then do nothing
         delegate.selectedChapter = [NSString stringWithFormat:@"%d",[delegate.selectedChapter intValue] + 1];
         [delegate reloadVerses];
         [self resetReadViewToVerse:1];
         [table removeGestureRecognizer:recognizer];
    }
    if (recognizer.state==UIGestureRecognizerStateBegan ) {
        self.table.scrollEnabled = NO;
        [table removeGestureRecognizer:recognizer];
    }
    else if(recognizer.state==UIGestureRecognizerStateEnded) {
        self.table.scrollEnabled = YES;
        [table removeGestureRecognizer:recognizer];
    }


    return;



}
-(void) handleSwipeGestureleftUISwipeGestureRecognizer*)recognizer {

    if(![delegate.selectedChapter isEqualToString:@"1"])
    {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.4];
        [UIView setAnimationDelay:0.0];
        [UIView setAnimationBeginsFromCurrentState:YES];
        [UIView setAnimationDidStopSelector:@selector(animCompleteHandler:finished:context];
        [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
        [UIView commitAnimations];
        delegate.selectedChapter = [NSString stringWithFormat:@"%d",[delegate.selectedChapter intValue] - 1];
        [delegate reloadVerses];
        [self resetReadViewToVerse:1]; 
        [table removeGestureRecognizer:recognizer];
    }
    if (recognizer.state==UIGestureRecognizerStateBegan ) {
        self.table.scrollEnabled = NO;
        [table removeGestureRecognizer:recognizer];
    }
    else if(recognizer.state==UIGestureRecognizerStateEnded) {
        self.table.scrollEnabled = YES;
        [table removeGestureRecognizer:recognizer];
    }

    return;


}
-(void) longPressDetectedUIPinchGestureRecognizer*)recognizer {


    self.table.scrollEnabled = NO;
    SearchViewController *aSecondViewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil];
    aSecondViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentModalViewController:aSecondViewController animated:YES];

    /*[self.navigationController pushViewController:aSecondViewController animated:YES];*/

    [aSecondViewController release];
    [UIView commitAnimations];
    [table removeGestureRecognizer:recognizer];

    UIView *noteView = (UIView *)[self.view viewWithTag:101]; 
    //ViewWithTag Number should be same as used while allocating
    [noteView removeFromSuperview];
    UIView *setngView = (UIView *)[self.view viewWithTag:102]; 
    //ViewWithTag Number should be same as used while allocating
    [setngView removeFromSuperview];
    UIView *acntView = (UIView *)[self.view viewWithTag:100]; 
    //ViewWithTag Number should be same as used while allocating
    [acntView removeFromSuperview];
    UIView *popView = (UIView *)[self.view viewWithTag:106]; 
    //ViewWithTag Number should be same as used while allocating
    [popView removeFromSuperview];

}

当我们向左或向右滑动时, Action 也很慢。 请帮帮我。



Best Answer-推荐答案


每次调用例程 tableView:cellForRowAtIndexPath: 时添加一个识别器,并在处理完手势后删除一个。因此,在移除所有识别器(它们的数量等于单元格的数量)后,将无法识别手势。

也许您不应该在处理例程中删除识别器?

关于iphone - uitableview 单元格中的手势错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8351772/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4