19

コンテナビューとそのUITapGestureRecognizer上にあります。また、サブビューもあり、TTTAttributedLabel.

コンテナー ビューからジェスチャ レコグナイザーを削除すると、デリゲート メソッドTTTAttributedLabelDelegate

- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url can be called.

コンテナー ビューにジェスチャ認識エンジンを追加すると。そのアクション メソッドのみが呼び出されます。のデリゲート メソッドはTTTAttributedLabelDelegate呼び出されません。

ここで、 のリンクをタップしたときにデリゲート メソッドをTTTAttributedLabel呼び出し、コンテナ ビューの他の領域をタップしたときにアクション メソッドを呼び出す必要があります。

ありがとう。

4

6 に答える 6

15

これを使用しgestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouchてイベントを検出します。

- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
      if ([touch.view isKindOfClass:[TTTAttributedLabel class]])
      {
           return FALSE;
      }
      else
      {

         return TRUE;
      }
}

if ([touch.view isKindOfClass:[UIControl class]])また、すべての UIControlに使用することもできます UIGestureRecognizer。これがあなたの助けになることを願っています

于 2014-03-12T07:50:15.403 に答える
3

cancelsTouchesInViewジェスチャ認識エンジンのプロパティを NO に設定します。

gestureRecognizer.cancelsTouchesInView = NO;
于 2016-08-09T10:25:11.123 に答える
1

ユーザーがリンクではないラベルの一部をタップした場合にタップジェスチャを機能させたくない場合、@Nitinの答えは多少正しいです。ラベルにリンク以外のテキストが含まれている場合は、次のことをお勧めします。

  • TTTAttributedLabel.hファイルに新しいデリゲート メソッド (「handleSingleTap」など) を として作成します@optional

  • メソッドTTTAttributedLabel.mを見つけます。touchesEndedここでif (self.activeLink)条件があります。

  • elseこの条件のケースを次のように作成します。

    else {
    
        if ([self.delegate respondsToSelector:@selector(handleSingleTap)]) {
    
            [self.delegate handleSingleTap];            
        }
    }
    
  • ラベルを使用するクラスで、この新しいデリゲート メソッドをオーバーライドします。

このようにして、ユーザーがリンクをタップすると、ifがリンクの選択を処理します。ユーザーがリンク以外のテキストをタップelseすると、 はクラスのメソッドを呼び出します (これは のターゲット メソッドですtapGesture)。

また、tapGestureビューから を削除するか、@Nitin のコードを使用してラベルのタップを処理せず、ラベルが独自にタップを処理できるようにします。

于 2014-03-12T08:19:57.567 に答える
0

Nitinの提案は私にはうまくいきませんでした(理由は不明です)が、これはうまくいきました:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    if let touch = touches.first as? UITouch {
        if touch.view !== self.myTTTAttributedLabel {
            // Handle container view tap
        }
    }
    super.touchesBegan(touches, withEvent: event)
}

また、コンテナー ビューからジェスチャ レコグナイザーを削除し、代わりに上記の if 句でそれらのタップを処理する必要があります。

于 2015-05-08T11:23:05.830 に答える