[解決済み] Swiftでセレクタに引数を渡す
質問
プログラムでUITapGestureRecognizerをビューの1つに追加しています。
let gesture = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(modelObj:myModelObj)))
self.imageView.addGestureRecognizer(gesture)
func handleTap(modelObj: Model) {
// Doing stuff with model object here
}
私が遭遇した最初の問題は "「#selector」の引数が「@Objc」メソッド、プロパティ、またはイニシャライザを参照していないことでした。
クールなので、handleTapのシグネチャに@objcを追加しました。
@objc func handleTap(modelObj: Model) {
// Doing stuff with model object here
}
今、私はエラー "パラメータの型がObjective-Cで表現できないので、メソッドは@objcをマークすることができませんを取得しています。
これは、建物の地図のイメージで、興味のあるポイントの位置を示すいくつかのピン画像があるだけです。ユーザーがこれらのピンをタップしたときに、どの注目点をタップしたかを知りたいのですが、これらの注目点を記述したモデルオブジェクトを持っています。このモデルオブジェクトを使ってピン画像に地図上の座標を与えているので、このオブジェクトをジェスチャーハンドラに送信するだけなら簡単だと思いました。
解決方法
いくつか誤解があるようですね。
を使用する場合 ターゲット/アクション を使う場合、関数シグネチャは特定の形式を持たなければなりません...
func doSomething()
または
func doSomething(sender: Any)
または
func doSomething(sender: Any, forEvent event: UIEvent)
ここで...
は
sender
パラメータは、アクションメッセージを送信するコントロールオブジェクトです。
あなたの場合、送信者は
UITapGestureRecognizer
また
#selector()
は func のシグネチャを含むべきで、渡されたパラメータを含んではいけません。つまり...
func handleTap(sender: UIGestureRecognizer) {
}
べきである...
let gesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
func とジェスチャーがビューコントローラの中にあると仮定すると、その中の
modelObj
がプロパティ / アイバーである場合、ジェスチャー認識器と一緒に渡す必要はなく、単に
handleTap
関連
-
[解決済み] performSelectorのセレクタが不明なため、リークが発生する可能性があります。
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] Swiftでindexとelementでループを反復させる方法
-
[解決済み] SwiftでStringを配列に分割する?
-
[解決済み] 奇妙な不要なXcodeログを隠す
-
[解決済み] Swiftの@selector()?
-
[解決済み] ぼかしの入ったオーバーレイビューの作成
-
[解決済み】Swiftでプレースホルダーの文字色を変更する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
XCode のコンパイル例外を解決する clang: error: linker command failed with exit code 1
-
[解決済み] iOSまたはmacOSで、インターネット接続が有効かどうかを確認するにはどうすればよいですか?
-
[解決済み] フレームワークを使用したiOSアプリがデバイス上でクラッシュ、dyld: ライブラリがロードされない、Xcode 6 Beta
-
[解決済み] iPhone UITextField - プレースホルダーの文字色を変更する
-
[解決済み] UITextViewのマージン/パディングをなくす方法
-
[解決済み] UIButtonのタイトルを左揃えにするにはどうしたらよいですか?
-
[解決済み] iPhone 5の画面解像度に対応したアプリを開発・移行するには?
-
[解決済み] iOS 7でステータスバーとナビゲーションバーがビューの境界を越えて表示される
-
[解決済み] NSNotificationCenterのaddObserver in Swift
-
[解決済み] Swiftのプロトコルでオプションのメソッドを定義するには?