[解決済み] SwiftでUIBarButtonItemにアクションを設定する方法
2023-02-19 19:40:54
質問
Swift でカスタム UIBarButtonItem のアクションを設定するにはどうすればよいでしょうか。
以下のコードでは、ナビゲーションバーにボタンを配置することに成功しています。
var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:nil)
self.navigationItem.rightBarButtonItem = b
さて、ここで
func sayHello() { println("Hello") }
を呼び出したい。今までの私の努力。
var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:sayHello:)
// also with `sayHello` `sayHello()`, and `sayHello():`
そして
var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:@selector(sayHello:))
// also with `sayHello` `sayHello()`, and `sayHello():`
そして
var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:@selector(self.sayHello:))
// also with `self.sayHello` `self.sayHello()`, and `self.sayHello():`
なお
sayHello()
はインテリセンスに表示されますが、動作しません。
お世話になります。
EDIT: 後学のために、以下のように動作します。
var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:"sayHello")
どのように解決するのですか?
Swift 2.2 では、コンパイラでチェックされるセレクタのための特別な構文があります。それは、構文を使用します。
#selector(methodName)
.
Swift 3 以降。
var b = UIBarButtonItem(
title: "Continue",
style: .plain,
target: self,
action: #selector(sayHello(sender:))
)
func sayHello(sender: UIBarButtonItem) {
}
メソッド名がどのようなものであるべきかがわからない場合、非常に便利な特別バージョンのコピーコマンドがあります。カーソルをベースメソッド名 (例: sayHello) のどこかに移動して シフト + コントロール + オプション + C . これでキーボードに「記号名」が貼り付けられるようになります。さらに コマンド を押すと、「修飾されたシンボル名」がコピーされ、型も含まれるようになります。
Swift 2.3:
var b = UIBarButtonItem(
title: "Continue",
style: .Plain,
target: self,
action: #selector(sayHello(_:))
)
func sayHello(sender: UIBarButtonItem) {
}
これは、Swift 2.3ではメソッド呼び出しの際に最初のパラメータ名が必要ないためです。
構文については、swift.orgのこちらのページで詳しく解説されています。 https://swift.org/blog/swift-2-2-new-features/#compile-time-checked-selectors
関連
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] UITableViewの選択を無効にするにはどうすればよいですか?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftでindexとelementでループを反復させる方法
-
[解決済み] 文字列の長さを取得する
-
[解決済み] Objective-CでNSNotificationCenterを通してメッセージを送受信する?
-
[解決済み] Swiftを使用してアプリのバージョンとビルド番号を取得するにはどうすればよいですか?
-
[解決済み] iOS 7でステータスバーとナビゲーションバーがビューの境界を越えて表示される
-
[解決済み] Swift で HTTP リクエストを行うにはどうしたらいいですか?
-
[解決済み] iOSアプリをApple Developer Programや脱獄せずにデバイス上でテストすることができます。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
libc++abi.dylib が NSException 型の捕捉できない例外で終了する理由 エラー
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] performSelectorのセレクタが不明なため、リークが発生する可能性があります。
-
[解決済み] Xcode 7のエラーです。"Missing iOS Distribution signing identity for ..." (iOS配布用署名IDがありません)
-
[解決済み] 奇妙な不要なXcodeログを隠す
-
[解決済み] Swiftの@selector()?
-
[解決済み] Swift 3, 4, 5 で dispatch_after GCD を書くにはどうしたらいいですか?
-
[解決済み] iOS 13でダークモードをオプトアウトすることは可能ですか?
-
[解決済み] Swift 3でディスパッチキューを作成する方法
-
[解決済み] Swiftのプロトコルでオプションのメソッドを定義するには?