2012-07-27 65 views
3

一張照片的勝過千言萬語......我可以在UITableView的allowsMultipleSelectionDuringEditing設置爲YES時使用自定義複選標記嗎?

enter image description here

對於更多一點背景,我有一個UITableView利用iOS 5中的allowsMultipleSelectionDuringEditing設置爲YES。這導致在單元處於編輯模式時單元左側顯示空的和​​填充的編輯控件。這種行爲正是我想要的。我只是想改變這些複選標記的外觀。

我知道這將有可能編寫自定義選擇邏輯,並基本上推出我自己的版本(如thisthis),但這正是我想避免的。該系統已經就位,我想盡可能多地重複使用。

回答

4

這是我最近來的。這很簡單,它的工作原理,同時重用了幾乎所有預先烘焙的系統。然而,這也是一個巨大的黑客攻擊,並且在運行一小時的內省之後依靠利用UITableViewCell的未公開的視圖層次結構。

簡而言之,這只是隱藏了通常負責顯示覆選標記的視圖,允許我添加自己的視圖,以顯示它的位置。然後,當單元格的選擇或編輯狀態發生變化時,我可以操作此替身視圖...

要防止出現標準複選標記,所需的全部是自定義-layoutSubviews實現。在-willTransitionToState:-setEditing:animated:之後,根據文檔調用它,確保在isSelectedisEditing發生更改時該狀態始終有效。

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    // Find the offending view, and quietly bury it... 
    for (UIView* subview in [self subviews]) 
    { 
     // As determined by NSLogging every subview's class, and guessing which was the one I wanted 
     if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellEditControl"]) 
     { 
      [subview setHidden:YES]; 
     } 
    } 

    if ([self isEditing]) 
    { 
     // Show the custom view however you want. 
     // The value of [self isSelected] will be useful... 
    } 
    else 
    { 
     // Hide the custom view. 
    } 
} 

我仍然會歡迎有更多的解決方案......猶太教徒。

+0

我用它來改變框架的大小。謝謝:) – Hackmodford 2012-11-01 20:30:13

+0

UITableViewCellEditControl實際上只包含一個UIImageView,它根據選擇狀態而改變。然後你可以直接替換圖片(通過setImage),這樣你就不必爲定位而煩惱了。 – 2014-01-07 13:59:46

+0

tableView:shouldIndentWhileEditingRowAtIndexPath:? Doc說,它只適用於分組樣式表格視圖,但它也幫助我明白 – zaplitny 2015-02-17 15:19:24

相關問題