2009-05-19 151 views
2

我有一個UITableView,它在每一行都有一個披露按鈕。當表格進入編輯模式並且按下刪除控件(「 - 」符號)時,刪除按鈕顯示,但是沒有更換顯示按鈕,而只是滑動到刪除按鈕的左側。當顯示刪除按鈕時,iPhone UITableView抑制泄露按鈕

蘋果UITableView指南解釋了代理的所有內容,除了在按下「 - 」符號時但在顯示刪除按鈕之前調用的代理外。

我只想在顯示刪除按鈕的時候壓制披露指標。

我猜我缺少一些東西......我已經設置了表格的單元格上的setHidesAccessoryWhenEditing:NO ,以便顯示該指示符以向用戶指示如果他們選擇該行,則他們可以編輯它...

我試圖複製的行爲是在編輯聯繫人時在聯繫人應用中完成的。任何幫助將不勝感激......

謝謝,格雷格

回答

4

執行此操作的標準方法是使用cell.hidesAccessoryWhenEditing = YES,該編輯是通常禁用導航的模式操作。

聯繫人應用程序實際上使用自定義表格單元格,如果它沒有那麼多地使用附件,並且根據其行爲來判斷單元格右邊緣的圖像,我不會感到驚訝。

如果你想刪除按鈕出現時就知道了,我建議你嘗試對細胞的showingDeleteConfirmation物業安裝的鍵 - 值觀察者,像這樣:

[cell addObserver: self forKeyPath: @"showingDeleteConfirmation" 
      options: NSKeyValueObservingOptionNew context: NULL]; 

然後您實現觀察員回調方法:

- (void)observeValueForKeyPath: (NSString *) keyPath ofObject: (id) object 
         change: (NSDictionary *) change context: (void *) context 
{ 
    if ([keyPath isEqualToString: @"showingDeleteConfirmation"]) 
    { 
     UITableViewCell * cell = (UITableViewCell *) object; 
     BOOL isShowing = [[change objectForKey: NSKeyValueChangeNewKey] boolValue]; 
     if (isShowing == NO) 
      cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
     else 
      cell.accessoryType = UITableViewCellAccessoryNone; 
    } 
} 

我要指出,我不知道該UITableViewCell類,是否是國際志願者組織兼容此屬性,但它一定是值得一試...

+0

Jim, 工程就像一個魅力!我真的很感激你花時間來回應... 謝謝, 格雷格 – 2009-05-19 02:36:30

1

披露指示器由tableView:accessoryTypeForRowWithIndexPath:管理所以也許你可以改變的附件類型,而在編輯模式。

我相信有一個tableView:accessoryButtonTappedForRowWithIndexPath:,也許你可以注意到你要編輯模式,然後改變tableView:accessoryTypeForRowWithIndexPath:爲每一行返回 - 在編輯模式下沒有配件。

我會試試看。

這裏是一個調用序列(不知道是否有幫助)關於如何去Inserting and Deleting Rows in Editing Mode約蘋果參考的描述/教程/例子。

1

我對Jim的解決方案的評論沒有得到很好的解答......這是爲我解決問題的版本......再次感謝Jim!

 
    - (void)observeValueForKeyPath: (NSString *) keyPath ofObject: (id) object 
         change: (NSDictionary *) change context: (void *) context 
    { 
    UITableViewCell * cell = object; 
    if ([keyPath isEqualToString: @"showingDeleteConfirmation"]) 
    { 
     BOOL isShowing = [[change objectForKey: NSKeyValueChangeNewKey] boolValue]; 
     if (!isShowing) 
     { 
      cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
     } 
     else 
     { 

      cell.accessoryType = UITableViewCellAccessoryNone; 
     } 
    } 
} 

2

或者當您創建單元格時,可以定義附件類型:單元格。editingAccessoryType = UITableViewCellAccessoryNone;

相關問題