2016-11-22 9 views
0

なぜ私のUITapGestureRecognizerが正しく発射されないのか分かりません。実際、それはまったく発射していません。私は画像のタップで実行する関数を取得しようとしています。セットアップに関するSwift 3:UITapGestureRecognizerが発砲しない

情報:プログラムで

  • 私もこれを上のロードしていますビュー

    • ストーリーボードを使用していない、ロードすべてが

    OK、それにUICollectionViewを持っているコードのように:

    let backButtonIcon: UIImageView = { 
        let bbi = UIImageView() 
        bbi.image = UIImage(named: "backIcon") 
        bbi.translatesAutoresizingMaskIntoConstraints = false 
        bbi.layer.zPosition = 2 
        return bbi 
    }() 
    

    私は、ビューにあることを追加しました:

    view.addSubview(backButtonIcon) 
    

    UIImageViewにタップ機能を追加するために、私が使用しています:

    let tapBackButton = UITapGestureRecognizer(target: self, action: #selector(backButtonPressed)) 
    backButtonIcon.isUserInteractionEnabled = true 
    backButtonIcon.addGestureRecognizer(tapBackButton) 
    

    そして最後に、ここで私がしようとしている機能があります現時点では、単純な印刷を実行します。

    func backButtonPressed(sender: UITapGestureRecognizer) { 
        print("Go Back Pressed") 
    } 
    

    更新:

    また

    bbi.isUserInteractionEnabled = true 
    

    と::2

    backButtonIcon.isUserInteractionEnabled = true 
    

    更新:

    は、私はすでに追加しようとしている私は別の空白のビューを作成し、コードを使用

    それがここにあるとおりにし、それが働きました。

    UICollectionViewと関係がありますか?

    私はUICollectionView zPosition -1とUIImageView zPositionを1にしましたが、それもうまくいきませんでした。

  • +0

    セレクタが正しく表示されない場合は、認識できないセレクタで少なくともクラッシュする必要があります。 'backButtonIcon'のsuperviewとは何ですか? – Larme

    +0

    @Larme nope no crash。それはなぜ正しくないのですか? – JamesG

    +0

    追加されたビューへの参照(つまり変数)を保持していないときにgestureRecognizerが機能しないという問題が発生しました。ここに私の記事があります:http://stackoverflow.com/questions/40144874/frontmost-uiview-with-tapgesturerecognizer-not-receiving-touches/40157112#40157112 – toddg

    答えて

    2

    イメージビューは、デフォルトでユーザーイベントを無視します。通常は、イメージビューはインターフェイス内のビジュアルコンテンツを表示するためにのみ使用します。イメージビューでユーザーのやりとりも処理する場合は、isUserInteractionEnabledプロパティの値をtrueに変更します。これを実行した後、ジェスチャー認識機能を付けたり、他のイベント処理テクニックを使用してタッチイベントやその他のユーザー開始イベントに応答することができます。

    ソース:https://developer.apple.com/reference/uikit/uiimageview

    +0

    の更新1を参照してください私はそれを試みました:/ – JamesG

    +0

    私の質問を更新しました – JamesG

    +1

    それは間違いなく、 – Brett

    0

    私は、問題はすでに定義では有効になってタップを持ってUICollectionViewCellsで構成されているUICollectionView、であると思います。

    私は非常に古いアプリを見ています(Swift 1。x)は、私はそれに日の光を見たことがないよう(私の個人的な使用のために書いた)と、ここで私がやるように見えたものだ - あなたは、おそらく、このいくつかのバリエーションを実行する必要があります。

    • サブクラス化UICollectionViewCellとUILabelを追加しましたUIImageViewをサブビューとして追加し、それらに(タップアクションのNSURLとともに)入力します。

    • 私のUICollectionView代理人(特定のUIViewControllerもSFSafariViewControllerデリゲートでした)を宣言(採用)しました。そのVCののviewDidLoad(で

    • )私はは、(リロードのために)(除去する)長押し、ダブルタップジェスチャーを設定しなかったが、は、タップジェスチャーを設定していなかった - それは必要ありません。

    • そのVCのviewDidLoad()では、セルをロード(および読み込み)しました。

    ここで私はあなたが立ち往生しているが、より多くのコードなしで、私はわからないんだと思うことだ:

    に対して符号化
    • func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
          if let cell = collectionView.cellForItemAtIndexPath(indexPath) as? BookmarkCell { 
           selectedBookmarkSection = indexPath.section 
           selectedBookmarkRow = indexPath.row 
           sfc = SFSafariViewController(URL: cell.targetUrl!, entersReaderIfAvailable:true) 
           sfc.delegate = self 
           presentViewController(sfc, animated: true, completion: nil) 
          } else { 
           // Error indexPath is not on screen: this should never happen. 
          } 
      } 
      

    してくださいは、これは2014年7月に書いたものですから(私はSwift 3.xのcollectionView(didSelectItemAt:indexPath :)を更新しますが、それだけです)。

    TR:私は特にあなたのタップがUICollectionViewの外に見えていると思います。

    関連する問題