3

百聞は一見にしかず…

ここに画像の説明を入力

もう少し背景として、iOS 5 のallowsMultipleSelectionDuringEditing設定を利用した UITableView がありますYES。これにより、セルが編集モードのときはいつでも、空の編集コントロールと塗りつぶされた編集コントロールがセルの左側に表示されます。この動作はまさに私が望むものです。これらのチェックマークの外観を変更したいだけです。

カスタムの選択ロジックを記述して、基本的に独自のバージョン ( thisthisなど) を作成できることはわかっていますが、それは避けたいことです。すでにシステムが整っているので、できるだけ再利用したい。

4

1 に答える 1

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.
    }
}

もう少し... コーシャな解決策を歓迎します。

于 2012-07-27T21:17:24.213 に答える