2013-11-26 50 views
0

加入自己的功能如何添加手勢(左到右),這將在iOS7繼承它叫子類化的UITableViewCell和iOS中

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if (editingStyle==UITableViewCellEditingStyleDelete) 
{ 
    // 
} 
} 

方法來一個UITableViewCell。

+0

IOS的​​默認功能。如果不工作嘗試新的viewcontroller – Vinodh

回答

1

您應該創建自定義類,從的UITableViewCell交付,你應該在初始化添加UIPanGestureRecognizer:

UIGestureRecognizer* recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; 
recognizer.delegate = self; 
[self addGestureRecognizer:recognizer]; 

的下一步是替代方法gestureRecognizerShouldBegin:

-(BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer { 
    CGPoint translation = [gestureRecognizer translationInView:[self superview]]; 
    if (fabsf(translation.x) > fabsf(translation.y)) { 
     return YES; 
    } 
    return NO; 
} 

,並添加handlePan:

-(void)handlePan:(UIPanGestureRecognizer *)recognizer { 
     if (recognizer.state == UIGestureRecognizerStateBegan) { 
      _originalCenter = self.center; //variable to keep centre 
     } 

     if (recognizer.state == UIGestureRecognizerStateChanged) { 
      CGPoint translation = [recognizer translationInView:self]; 
      //this check out if you drag more than half of the screen width 
      self.center = CGPointMake(_originalCenter.x + translation.x, _originalCenter.y); 
      _deleteOnDragRelease = self.frame.origin.x < -self.frame.size.width/2; 
     } 

     if (recognizer.state == UIGestureRecognizerStateEnded) { 
      CGRect originalFrame = CGRectMake(0, self.frame.origin.y, 
               self.bounds.size.width, self.bounds.size.height); 
      if (!_deleteOnDragRelease) { 
       [UIView animateWithDuration:0.2 
           animations:^{ 
            //this is for animate that you move the cell but you don't need it (it just look cool) 
            self.frame = originalFrame; 
           } 
       ]; 
      } 
if (_deleteOnDragRelease) { 
      // need to implement your delegate 
      [self.delegate itemToDeleted:self.YOURDATA]; 
     } 
     } 
    } 

您需要使用方法添加協議itemToDeleted:你需要實現它的tableView:commitEditingStyle。讓我知道你是否需要更多的幫助。 希望這個幫助

+0

謝謝@Greg ..我們不能調用任何表視圖委託方法,而不是調用handlePan:方法來避免我們的自定義實現在handlePan:方法中。 –

+0

對不起,我不明白你的意思。如果你想要處理上面的這個刪除方法,你需要實現委託併爲你的tableView委託文件中的這個單元格(myTableViewCustomCell.delegate = self)進行設置。之後,你只需要添加方法: - (void)itemToDeleted:(id)YOURDATA {//處理YOURDATA的刪除}。它回答你的問題嗎? – Greg

+0

感謝@Greg ..實際上,UITableViewCell輕掃和刪除功能在iOS6上的兩個方向(從右到左,從左到右)都正常工作。但在iOS7上,只有一個方向(右向左)正在工作。我只是想在iOS7上添加從左到右的輕掃和刪除功能。所以我試圖添加從左到右滑動手勢(應該與默認的從右到左手勢相同)到UITableViewCell。 –

1

如果你有NSMutableArray* sourceArray作爲數據源爲您的tableView,嘗試這樣的事情:

- (void)tableView:(UITableView*)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath 
{ 
    if (editingStyle==UITableViewCellEditingStyleDelete) 
    { 
     [sourceArray removeObjectAtIndex:indexPath.row]; 

     [tableView beginUpdates]; 
     [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft]; 
     [tableView endUpdates]; 
    } 
} 
+0

這是正確的,不要忘記設置tableView的委託和出口 –

相關問題