2012-04-04 89 views
4

我一直在試圖區分在我的UITableView編輯狀態。區分UITableView編輯狀態?

我只需要時調用的方法在編輯模式下輕敲編輯按鈕後,那麼當你拿到你的幻燈片中,你看到的小圓形刪除圖標,但在用戶刷卡刪除。

無論如何我可以區分兩者嗎?

謝謝。

編輯:

解由於羅德里戈

無論每個小區和整個的tableview具有「編輯」 BOOL值,所以循環通過所有的細胞,並且如果它們中的一個以上的被編輯然後我們知道整個表格(用戶點擊編輯按鈕),但是如果只有一個正在編輯,那麼我們知道用戶已經刷過一個單元格,編輯單個單元格,這讓我可以單獨處理每個編輯狀態!

- (void)setEditing:(BOOL)editing animated:(BOOL)animated 
{ 
    [super setEditing:editing animated:animated]; 


    int i = 0; 
    //When editing loop through cells and hide status image so it doesn't block delete controls. Fade back in when done editing. 
    for (customGuestCell *cell in self.tableView.visibleCells) 
    { 
     if (cell.isEditing) { 
      i += 1; 
     } 
    } 

    if (i > 1) 
    { 
     for (customGuestCell *cell in self.tableView.visibleCells) 
     { 
      if (editing) 
      { 
       // loop through the visible cells and animate their imageViews 
       [UIView beginAnimations:nil context:nil]; 
       [UIView setAnimationDuration:0.4]; 
       cell.statusImg.alpha = 0; 
       [UIView commitAnimations]; 
      } 
     } 
    } 
    else if (!editing) 
    { 
     for (customGuestCell *cell in self.tableView.visibleCells) 
     { 
      [UIView beginAnimations:nil context:nil]; 
      [UIView setAnimationDuration:0.4]; 
      cell.statusImg.alpha = 1.0; 
      [UIView commitAnimations];    
     } 
    } 
} 
+0

恕我直言,這不起作用:當在常規編輯模式(所有單元格可編輯),然後第一個單元格認爲它是在「在刪除模式下滑動」。 – obiwahn 2012-11-23 11:12:16

回答

3

有一種策略,我現在不測試,但也許工作。

您可以設置的UITableView是在編輯模式和測試與isEditing功能。但細胞有相同的isEditing。所以你可以檢查是否只有一個單元格處於編輯狀態或所有的UITableView。

檢查當你設置一個單元格處於編輯狀態時,UITableView根本改變爲編輯狀態。

+0

啊,真的很好主意,但我已經給出了一個嘗試,並沒有設法讓它以這種方式工作。 – 2012-04-04 13:12:24

+0

得到了這個解決方案的工作,謝謝!我發佈瞭如何在OP中解決它。 – 2012-04-04 13:37:14

1

我發現要做到這一點的唯一可靠的方法是保持私有標誌inEditMode並在setEditing:animated中切換此標誌。然後使用inEditMode而不是isEditing來檢查表格是否處於編輯模式。

+0

對不起,這裏沒有很多的信息,謝謝回答,但你可以擴大嗎?你如何使用你的'inEditMode' BOOL來區分編輯模式? – 2012-04-04 13:20:10

+1

不同於'isEditing',如果表格在編輯模式下是「真正的」(即不是通過單一的滑動操作),則此'inEditMode'僅* * YES。 – edsko 2012-04-04 14:37:41

2

我選擇的解決方案是將編輯按鈕的操作覆蓋到自定義方法,例如editBtnTapped。在這個方法中,我設置了一個變量editButtonPressed,然後,因爲我們覆蓋了編輯按鈕的動作,所以手動調用setEditing:animated :.

在viewDidLoad中:

[self.navigationItem.rightBarButtonItem setAction:@selector(editBtnPressed)]; 

然後新的操作方法:

- (IBAction) editBtnPressed 
{ 
    if ([self isEditing]) 
    { 
    self.editButtonPressed = NO; 
    [self setEditing:NO animated:YES]; 
    } 
    else 
    { 
    self.editButtonPressed = YES; 
    [self setEditing:YES animated:YES]; 
    } 
} 

現在setEditing:動畫:我檢查editButtonPressed標誌,以確定是否我在,因爲一個有按編輯按鈕或簡單的用戶刷卡。如果由於編輯按鈕我在那裏,我添加單元格;否則我不會。

請記住,您可能需要其他地方的標誌(例如numberOfRowsInSection)。

希望這個替代方案有所幫助。

問候,

--John

4

即使這個職位是很老了,下面可能會有所幫助別人:如果您實現以下的委託信息

- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath;

and

- (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath;

編輯單行時會調用這些方法。然後只有在用戶點擊編輯按鈕時纔會調用-[UIViewController setEditing:animated:]