簡體   English   中英

在UITableViewCell中向左或向右滑動以刪除沒有刪除按鈕的單元格?

[英]Swipe left or right anywhere in a UITableViewCell to delete the cell with no delete button?

我希望能夠在表格視圖單元格中的任何位置向左或向右滑動以刪除帶動畫的單元格而不顯示刪除按鈕。 我怎樣才能做到這一點?

我沒有試過並實現過這個,但我會試一試。 首先,創建一個自定義UITableViewCell,並讓它有2個屬性可以使用

  1. 它正在使用的tableView的引用。
  2. 用於在tableView中查找單元格的indexPath。(注意,每次刪除此更改的所有單元格的單元格時都需要更新)

在您的cellForRowAtIndexPath: ,在創建自定義單元格的位置,設置這些屬性。 還要向單元格添加UISwipeGestureRecognizer

cell.tableView=tableView;
cell.indexPath=indexPath;
UISwipeGestureRecognizer *swipeGestureRecognizer=[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(deleteCell:)];
[cell addGestureRecognizer:swipeGestureRecognizer];
[swipeGestureRecognizer release];

確保手勢僅接收水平滑動。

-(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if([[gestureRecognizer view] isKindOfClass:[UITableViewCell class]]&&
       ((UISwipeGestureRecognizer*)gestureRecognizer.direction==UISwipeGestureRecognizerDirectionLeft
        ||(UISwipeGestureRecognizer*)gestureRecognizer.direction==UISwipeGestureRecognizerDirectionRight)) return YES;
}

在你的deleteCell:

-(void) deleteCell:(UIGestureRecognizer*)gestureRec
{
    UIGestureRecognizer *swipeGestureRecognizer=(UISwipeGestureRecognizer*)gestureRec;
    CustomCell *cell=[swipeGestureRecognizer view];
    UITableView *tableView=cell.tableView;
    NSIndexPath *indexPath=cell.indexPath;
    //you can now use these two to perform delete operation
}

@MadhavanRP發布的解決方案有效,但它比它需要的更復雜。 您可以采用更簡單的方法並創建一個手勢識別器來處理表中發生的所有滑動,然后獲取滑動的位置以確定用戶刷過的單元格。

要設置手勢識別器:

- (void)setUpLeftSwipe {
    UISwipeGestureRecognizer *recognizer;
    recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self
                                                       action:@selector(swipeLeft:)];
    [recognizer setDirection:UISwipeGestureRecognizerDirectionLeft];
    [self.tableView addGestureRecognizer:recognizer];
    recognizer.delegate = self;
}

viewDidLoad調用此方法

要處理滑動:

- (void)swipeLeft:(UISwipeGestureRecognizer *)gestureRecognizer {
    CGPoint location = [gestureRecognizer locationInView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
    ... do something with cell now that i have the indexpath, maybe save the world? ...
}

注意:您的vc必須實現手勢識別器委托。

實行

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;

這兩個方法,如果UITableViewCellEditingStyle是UITableViewCellEditingStyleDelete,那么做某事來擦除你的單元格

- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

就這樣。

為此,你必須在你的項目中添加此代碼。

// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return YES if you want the specified item to be editable.
    return YES;
}

// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        //add code here for when you hit delete
    }    
}

其他信息你可以通過這個鏈接在這里輸入鏈接描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM