web-dev-qa-db-ja.com

Swift3 iOS-UITapGestureRecognizerトリガー関数の作成方法

UITapGestureをUIButtonに追加して、タップしたときに関数がトリガーされるようにします。私はSwift 3を使用していますが、いくつかのエラーが発生しています:

キャッチされない例外 'NSInvalidArgumentException'によるアプリの終了、理由: '-[SwiftRunner.ViewController tapBlurButton]:認識されないセレクターがインスタンス0x149e07610に送信されました

これはおおよそ私が持っているものです:

// Swift 3
import UIKit
class ViewController {

   @IBOutlet weak var qsBlurButton: UIButton!       

   override func viewDidLoad() {
      super.viewDidLoad()

      let tapGesture = UITapGestureRecognizer(target: self, action: Selector(("tapBlurButton")))
      qsBlurButton.addGestureRecognizer(tapGesture)
   }

   func tapBlurButton(sender: UITapGestureRecognizer) {
      print("Please Help!")
   }
}
45
Sebbe

コードからSwift 3.0を使用しているので、selector構文を次のように変更します

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapBlurButton(_:)))

そしてこのようなあなたの機能

func tapBlurButton(_ sender: UITapGestureRecognizer) {
    print("Please Help!")
}

編集:

タップジェスチャーでボタンを使用しているという考えではなく、ボタンに組み込みメソッドaddTargetを使用する代わりに、このようにタップジェスチャーを作成する必要はありません

qsBlurButton.addTarget(self, action: #selector(self.tapBlurButton(_:)), forControlEvents: .TouchUpInside)

func tapBlurButton(_ sender: UIButton) {
    print("Please Help!")
}
105
Nirav D

Swift

セレクターのfuncが次のような場合(注:_がありません):

func tapBlurButton(sender: UITapGestureRecognizer) {
  print("Please Help!")
}

セレクターは次のようになります。

#selector(self.tapBlurButton(sender:))

セレクターの最終的なコードは次のとおりです。

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapBlurButton(sender:)))

最初のパラメーターに_を指定しない場合、最初のパラメーターのフルネームを使用する必要があります。

9
skymook

ジェスチャレコグナイザーを追加するには、どの機能を呼び出すかを示すものを作成する必要があります。

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTapFrom(recognizer:)))

次に、必要な要素に追加します。 (あなたはボタンを使用していますが、他の人が説明したように、ボタンにはネイティブの「addTarget」メソッドがあります)

説明のために、UIViewに追加したいとします。

self.someView.addGestureRecognizer(tapGestureRecognizer)

また、一部の要素はデフォルトで「ユーザーインタラクティブではない」ことを忘れないでください。そのため、そのプロパティも変更する必要があります。

self.someView.isUserInteractionEnabled = true

Swift 4では、関数には@objc宣言が必要です。

@objc func handleTapFrom(recognizer : UITapGestureRecognizer)
{
    // Some code...
}
6
Pochi