1

スワイプ ジェスチャ レコグナイザを tableViewCell に追加しようとしていますが、機能しません。

これは私が自分のセルを作成する方法です:

CellIdentifier = @"EventsSentCell";
    nibObjcet = [[NSBundle mainBundle] loadNibNamed:@"EventsSentCell" owner:self options:nil];

EventsSentCell *cell = [[EventsSentCell alloc] init];
cell = (EventsSentCell *)[nibObjcet objectAtIndex:0];

そして、これは私のセルが.mファイルでどのように開始されるかです:

-(id)init{
    self = [super init];
    if (self) {
        leftSwipe = [[UISwipeGestureRecognizer alloc] init];
        leftSwipe.direction= UISwipeGestureRecognizerDirectionLeft;
        [leftSwipe addTarget:self action:@selector(swipedLeft)];
        [self addGestureRecognizer:leftSwipe];
    }
    return self;
}

これは、.h ファイルでジェスチャ認識エンジンを宣言した方法です。

@property (nonatomic,strong) IBOutlet UISwipeGestureRecognizer *leftSwipe;

しかし、何らかの理由で私のメソッドが呼び出されません。

何か案は?

ありがとう

以下のコードを入れてみました:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    NSLog(@"%@",gestureRecognizer);
    return YES;
}

左にスワイプした後に得られる結果は次のとおりです。

<UILongPressGestureRecognizer: 0xa9d99a0; state = Possible; view = <UITableViewCellContentView 0xa9d8ce0>; target= <(action=_longPressGestureRecognized:, target=<EventsSentCell 0xa9d8bb0>)>>
4

2 に答える 2

0

実際の質問に答える前に、コードの他の問題を指摘させてください。

EventsSentCell *cell = [[EventsSentCell alloc] init];
cell = (EventsSentCell *)[nibObjcet objectAtIndex:0];

まず、この 2 行に意味はありません。EventSentCellnib なしでのインスタンスを割り当てて初期化しています。cellこれを行った後、によって初期化されたインスタンスを指すように上書きしていますloadNibNamed:。これを次のように単純化できますがEventsSentCell = (EventsSentCell *)nibObject[0];
、これらの最適化の後でも、これは推奨される実装方法ではありませんcellForRowAtIndexPath:registerNib:forCellReuseIdentifier:inviewDidLoadを使用 dequeueReusableCellWithIdentifier:forIndexPath:してからセルを取得し、自分で nib を完全にロードしないようにする必要があります。

次、

@property (nonatomic,strong) IBOutlet UISwipeGestureRecognizer *leftSwipe;

このプロパティを として宣言しますIBOutletが、(私の知る限り)コード、より具体的にはinitメソッドでのみ設定しています。IBOutlet完全に省略できます。

そして、このinit方法はおそらくあなたの問題の原因でもあります. を使用してビューをインスタンス化する場合、 の代わりloadNibNamedinitWithCoder:が呼び出されinitます。そこにカスタム初期化コード (この場合はジェスチャ認識機能を追加) を実装すると、問題なく動作するはずです。

于 2013-07-21T11:13:50.463 に答える