【Swift】実行時にUIBarButtonItemのターゲットとアクションを設定する方法
実行時にバーボタンのアクションを作成するには、いくつかの手順を踏む必要があります。まずは、新しいプロジェクトの作成から始めましょう。
プロジェクトを作成したら、ストーリーボードを開き、ViewControllerを選択して「Editor」→「Embed in」からNavigation Controllerに埋め込みます。
1. アクション用のメソッドを定義する
次に、該当するViewControllerクラスを開き、ボタンが押されたときに呼び出されるObjective-C互換の関数を定義します。@objc属性を付けることで、#selectorから参照できるようになります。
@objc func barButtonAction() {
print("Button pressed")
}2. viewWillLayoutSubviews内でバーボタンを生成する
続いて、クラスにviewWillLayoutSubviewsメソッドを追加します。この中で、実行時にナビゲーションバーへボタンを追加する処理を行います。
バーボタンのインスタンスを作成
まず、UIBarButtonItemのインスタンスを生成します。
let barButton = UIBarButtonItem()
ボタンにタイトルを設定
次に、このバーボタンに表示名を設定します。
barButton.title = "custom"
アクションとターゲットを設定
ここが本記事のポイントです。先ほど定義したメソッドをセレクタとして指定し、ターゲットにはselfを設定します。
barButton.action = #selector(barButtonAction) barButton.target = self
ナビゲーションバーにボタンを追加
最後に、このボタンをアプリのナビゲーションバーに追加します。ここでは左側のバーボタンとして配置しています。
self.navigationItem.setLeftBarButton(barButton, animated: true)
完成コード
ここまでの手順をまとめると、コード全体は以下のようになります。
override func viewWillLayoutSubviews() {
let barButton = UIBarButtonItem()
barButton.title = "custom"
barButton.action = #selector(barButtonAction)
barButton.target = self
self.navigationItem.setLeftBarButton(barButton, animated: true)
}
@objc func barButtonAction() {
print("Button pressed")
}実行結果
上記のコードをデバイスで実行すると、ナビゲーションバーの左側に「custom」というボタンが表示されます。

このボタンを複数回押すと、コンソールには以下のように「Button pressed」というログが出力されます。

このように、viewWillLayoutSubviewsなどのタイミングでUIBarButtonItemのインスタンスを生成し、actionに#selectorで指定したメソッドを、targetにselfを設定することで、実行時に動的にバーボタンの挙動を制御できます。
-
iPhone 12で無料着信音をダウンロードして設定する方法【GarageBand・iTunes両対応】
多くの方が、iPhoneに最初から入っている標準の着信音ではなく、お気に入りの曲を使ったオリジナル着信音を設定したいと考えています。しかし、実際に試してみると、iPhone 12・iPhone 12 Pro(Max)・iPhone 12 miniには、曲を直接着信音として設定する簡単な方法が用意されていないことに気づき、戸惑う方も少なくありません。 実は、Appleはカスタム着信音の設定をあえて難しくしており、ユーザーにiTunes Storeで1ドル以上払って着信音を購入してほしいという狙いがあります。とはいえ、好きな曲を電話の着信音・メッセージ通知音・アラームなどに無料で設定できる方法が2
-
Windows 10でWi-Fiとイーサネットのデータ使用量制限を設定する方法
以前のバージョンのWindowsでは、ワイヤレス(Wi-Fi)やイーサネットアダプターのデータ使用量を確認することしかできませんでした。しかし、Windows 10 April 2018 Update(バージョン1803)以降では、イーサネット、Wi-Fi、モバイルネットワークそれぞれに対してデータ使用量の上限を設定できるようになりました。従来はイーサネットやWi-Fi接続を「従量制課金接続」として設定することはできましたが、これらのネットワークのデータ使用量そのものを制限することはできませんでした。 この機能は、通信量に上限のあるプロバイダープランを利用している方にとって特に便利です。月々