これは私が来た中で最も近いです。シンプルで機能しますが、事前に作成されたシステムのほとんどすべてを再利用します。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.
}
}
もう少し... コーシャな解決策を歓迎します。