這是我最近來的。這很簡單,它的工作原理,同時重用了幾乎所有預先烘焙的系統。然而,這也是一個巨大的黑客攻擊,並且在運行一小時的內省之後依靠利用UITableViewCell
的未公開的視圖層次結構。
簡而言之,這只是隱藏了通常負責顯示覆選標記的視圖,允許我添加自己的視圖,以顯示它的位置。然後,當單元格的選擇或編輯狀態發生變化時,我可以操作此替身視圖...
要防止出現標準複選標記,所需的全部是自定義-layoutSubviews
實現。在-willTransitionToState:
和-setEditing:animated:
之後,根據文檔調用它,確保在isSelected
或isEditing
發生更改時該狀態始終有效。
- (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.
}
}
我仍然會歡迎有更多的解決方案......猶太教徒。
我用它來改變框架的大小。謝謝:) – Hackmodford 2012-11-01 20:30:13
UITableViewCellEditControl實際上只包含一個UIImageView,它根據選擇狀態而改變。然後你可以直接替換圖片(通過setImage),這樣你就不必爲定位而煩惱了。 – 2014-01-07 13:59:46
tableView:shouldIndentWhileEditingRowAtIndexPath:? Doc說,它只適用於分組樣式表格視圖,但它也幫助我明白 – zaplitny 2015-02-17 15:19:24