0

サブクラスの要素にUITableViewCellタップジェスチャレコグナイザーまたはが含まれている状況がありますUIButtons

これらをタップすると、ハンドラーが呼び出されるだけでなく、didSelectRowAtIndexPath:デリゲートメソッドも呼び出されます。

ここで、理想的には、ユーザーがこれらの要素のいずれもタップしない場合、これを下のビュー(つまり、テーブルビューまたはテーブルセル)に渡して処理する必要があります。

これらの要素がタッチを飲み込み、TableViewデリゲートメソッドの起動を妨げないのはなぜですか?

4

2 に答える 2

0

次の関数をオーバーライドする必要があります。

-(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 

ここで、タッチが選択したコントロールから開始されたかどうかを確認できます。その場合は、デフォルトのアクションがここで発生しないようにNOを返す必要があります。以前に定義されたハンドラーが呼び出される場合は、YESを返します。

-(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    if(touch.view == self.playButton ) {
        return NO;
    }
    return YES;
}
于 2012-08-16T11:27:21.053 に答える
0

UITableViewCellサブクラスのcontentViewにtapGestureレコグナイザーを配置するソリューションを「ハッキング」しました。そのデリゲートは、カスタムUITableViewControllerサブクラスです。空のdidSelectRowAtIndexPath:実装を使用します。デリゲートメソッドは

- (void)didSelectTableCell:(MyTableViewCell*)aCell;

そしてそれは仕事をしました。デリゲートを設定したことを確認するために、セルがいつ作成されたかを覚えておく必要があります。

エレガントではありませんが、正常に動作します。

于 2012-08-21T15:05:31.520 に答える