0

私のデザイナーは、少しトリッキーなデザインを考え出しました. tableViewでは、彼らは私に
1)カスタムアクセサリービューを持たせたい-(UIButtonサブビュー)-
完了2)カスタムアクション(ナビゲーションスタックにプッシュされたdetailViewではなく、他の何か)をタップされたセルアクセサリーに与える-完了

ここで、トリッキーな部分が来ます。


1) セルをタップすると、アクセサリ ビューに「highlightedBackground」が表示されます。
2) アクセサリ ビューをタップすると、アクセサリ ビューのみが強調表示されますが、「alternativeHighlightedBackground」が表示されます。

要約すると、accessoryView には、セル全体がタップされたか、アクセサリ ビューのみがタップされたかに応じて、通常の背景と 2 つの異なる強調表示された背景があります。

現時点では、カスタム アクセサリとして機能する cellForRowAtIndexPath のアクセサリ ビューに UIButton をサブビューとして追加しています。明らかに、アクセサリ ビューはタッチ イベントをボタンに渡し、タップされたものに関係なく、ボタンは同じ背景で強調表示されます。セルは現時点ではカスタムではなく、通常の UITableViewCell インスタンスです。SDK は iOS5 ですが、残念ながら iOS6 は使用できません。

何かアドバイス?

4

1 に答える 1

1

アクセサリビュールートを破棄し、のサブクラスを作成しますUITableViewCell。init関数でボタンを作成し、それをcontentViewセルのサブビューとして追加し、ボタンのタッチアップアクションを好きなように設定layoutSubviewsしてから、次のようなものでオーバーライドします。

- (void)layoutSubviews
{
    [super layoutSubviews];

    CGRect bounds = self.contentView.bounds;

    CGFloat buttonOriginX = self.contentView.bounds.size.width - BUTTON_WIDTH - PAD;
    CGFloat buttonOriginY = floorf((bounds.size.height - BUTTON_HEIGHT)/2.0)+1;

    self.mybutton.frame = CGRectMake(buttonOriginX, buttonOriginY, BUTTON_WIDTH, BUTTON_HEIGHT );
}

ボタンは、セルがこのようになる前にタッチをインターセプトします。これにより、ボタンに触れたときに表示されるボタンを完全に制御できます(ハイライト状態の画像の設定を設定します)。

于 2012-12-16T06:12:47.973 に答える