2016-08-30 9 views
0

私はカスタムセルでtableViewを持っています。私は一つの細胞にimageViewを持っています。私はこれにimageViewを1つ追加するためにtapGestureをロードし、次にimageViewをクリックします。だから私は私の問題は、私はこのタップはimageViewに複数回、変更を加えられ、テーブルビューをスクロールすると、最初の変更をクリックすることでcellForRowAtIndexPath:UITableViewCellでimageにtapGestureを1つだけ追加する方法は?

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected:)]; 
singleTap.numberOfTapsRequired = 1; 
[cell.image setUserInteractionEnabled:YES]; 
[cell.image addGestureRecognizer:singleTap]; 

-(void)tapDetected:(id)sender{ 
    NSLog(@"single Tap on imageview"); 
} 

にこのコードを持っています。

すべてのセルにtapGestureを1回だけ追加するにはどうすればよいですか?

+0

すべての画像に同じタップジェスチャーを適用するか、画像ビューにタップジェスチャーが既に含まれている場合はスキップしますか? –

+0

行のすべての画像に対して同じジェスチャーを追加したいだけですが、1回だけです。私の関数はそれを行いますが、常にテーブルをスクロールすると機能します。私はタップ機能で常に値の変更を追加しているのであれば、これを最初に追加したいだけです... – user3745888

+0

既存のタップレコグナイザを最初に削除して追加できない理由はありますか? – DMan

答えて

0

カスタムセルを持っている場合することができます。このような機能:あなたは、セルごとに一度だけtapGestureを設定して確実である。この方法で

-(void) addTapGesture:(UITapGestureRecognizer*)tapGesture { 
    if (self.tapGesture == nil) { 
     [self.image setUserInteractionEnabled:YES]; 
     [self.image addGestureRecognizer:singleTap]; 

     self.tapGesture = tapGesture 
    } 
} 

。今

私は、これはあなたの問題を解決できるかどう

0

を教えてください問題

、あなたは毎回cellForRowAtIndexPathは、細胞を約あるたびにある、と呼ばれる新しいTapGestureRecognizerを追加します画面に表示されます!

解決策1:あなたはまた、単にそれがない場合は、新しいものを追加し、細胞が既にジェスチャー認識が含まれているかどうかを確認することができず、

旧ジェスチャー認識装置を保管してください。

// Check if the cell already contains a gesture recognizer 
// if not, add one! 
if (cell.gestureRecognizers.count == 0) { 
    // Now add the tap gesture recognizer and it will be the only one 
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected:)]; 
    singleTap.numberOfTapsRequired = 1; 
    [cell.image setUserInteractionEnabled:YES]; 
    [cell.image addGestureRecognizer:singleTap]; 
} 

注:これは一つだけTapGestureRecognizerは、各セルに適用されることが保証されますあなたは、おそらくチェックし、セルはあなたが をさらに追加することもできますdesire- 正確にジェスチャー認識が含まれていることを確認しなければなりませんジェスチャ認識プログラムをセルに追加してから、 に正しいものが含まれていることを確認する必要があります。

解決策2:TapGestureRecognizerを追加する前に、細胞からのすべてのジェスチャー認識装置を取り外し

ジェスチャー認識機能を削除します。これを行う、ちょうどあなたのカスタムセルに

// Removes all gesture recognizers in the cell 
for (UIGestureRecognizer *recognizer in cell.gestureRecognizers) { 
    [cell removeGestureRecognizer:recognizer]; 
} 

// Now add the tap gesture recognizer and it will be the only one 
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected:)]; 
singleTap.numberOfTapsRequired = 1; 
[cell.image setUserInteractionEnabled:YES]; 
[cell.image addGestureRecognizer:singleTap]; 
0

:これは一つだけTapGestureRecognizerは、各セルに適用されていることを確認しますあなたのcellForRowAtIndexPathで

class YourCell:UITableViewCell{ 
//add a variable to track has added a tapgesture to image view 
var isAddedTapGesture = false 
...... 
} 

(私は例として、SWIFT使用):

カスタムセルヘッダーで
if(cell.isAddedTapGesture == false){ 
//add the tap gesture to your image 
cell.cell.isAddedTapGesture = true 
} 
0

、(

@propertyのようなプロパティを作成強い、非原子的)UITapGestureRecognizer * tapGesture;

ジェスチャーのゲッターメソッドを追加します。

- (UITapGestureRecognizer*)tapGesture{ 
    if (!_tapGesture) { 
     _tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected:)]; 
    } 

    return _tapGesture; 
} 

awakeFomNib関数内で、以下のような画像ビューのジェスチャを削除して再度追加します。

[self.image removeGestureRecognizer:self.tapGesture]; 
[self.image addGestureRecognizer:self.tapGesture]; 

これは役に立ちそうです。

関連する問題