2

UITableView高さが異なる特定のセルを持つ があります。セル内のタッチが特定のポイントを下回っている場合、各セルにボタンを追加せずに、didSelectedRowAtIndexPath への応答を受け取らないようにしたいと考えていました。

例として、高さが 100 のセルと高さが 150 のセルの 2 つのセルがあるとしdidSelectRowAtIndexPath:ます。100 未満のタッチに対する応答を受信しない方法はありますか?

セル内の touches メソッドをオーバーライドし、デリゲートの接点をコントローラー/テーブルに戻し、その入力を使用してdidSelectRowAtIndexPath:応答を無視するかどうかを決定することを考えましたが、強調表示やその他の呼び出しが心配ですまた、それらをブロックするのに十分な速度ではない可能性があるかどうか. それは私には本当に不確かに思えます。

4

3 に答える 3

3

セルをサブクラス化しないと、それは不可能だと思います。

私の提案はこれを行うことです:

  1. セルのサブクラスを作成する
  2. didTapOutside のように、追加のブール iVar をセルに追加します。
  3. touchesBeganメソッドの Y 位置タップに基づいて、ブール値を True または False に設定します。
  4. didTapOutside ブール変数を読み取り、そのdidSelectRowAtIndexPath設定に従ってアクションを実行します

例は次のとおりです。

@interface MyCustomCell : UITableViewCell {
    BOOL didTapOutside;
}
@property (atomic, readwrite) BOOL didTapOutside;

そして実装:

@implementation MyCustomCell

@synthesize didTapOutside;

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:touch.view];

    didTapOutside =  (location.y>100);

    [super touchesBegan:touches withEvent:event];
}
于 2013-01-01T20:51:34.863 に答える
2

UITableViewCellたとえば、カスタムを作成できます。

CustomCell *cell = [[CustomCell alloc] initWithFrame:rect reuseIdentifier:identifier];

CustomCell の touchesBegan メソッドをオーバーライドし、次のようにしてタッチの位置を取得できます。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *aTouch = [touches anyObject];
    CGPoint point = [aTouch locationInView:self];
    // point.x and point.y have the coordinates of the touch

    // based on where the touch is... your custom code

    [super touchesBegan:touches withEvent:event];
}
于 2013-01-01T20:45:02.213 に答える
0

申し訳ありませんが、最初は質問を間違って読みました。これに対する簡単な解決策はありません。

サブクラスを使用したくない場合は、テーブルビューのセルメソッドを使用する代わりに、タッチを検出する領域に透明なビューまたはボタンを追加して、その領域にイベントを作成するだけです。

于 2013-01-01T20:58:39.807 に答える