Xcode Swift:Bar Button Item上に配置したボタンのタッチイベントが動かない

Bar Button Itemに上に配置したボタンに登録したはずのボタンイベントが、タッチしても動かなかったので調べました。

 

現象

ビルドは正常に成功。
タップしたときに呼ばれるはずの処理が呼ばれない。

 

シミュレーターで「追加」をタップすると、addメソッドが呼ばれるはずなのに…

f:id:mocotanus:20170625142352j:plain

ブレークポイントを設定してみたところ、やっぱり入ってこない。

 f:id:mocotanus:20170625142530j:plain

 

原因

接続元が間違っていた。

Bar Button Itemに接続(緑の状態)してしまっていたせい。
Bar Button Itemの配下にある「ボタン」のほうに接続(赤の状態)すればできる。

f:id:mocotanus:20170625144228j:plain

 

 

解決法

Bar Button Itemで右クリック(またはctrl+クリック)で黒い画面を表示させる。
Sent Actionsに追加された接続を「×」を押して削除する。

f:id:mocotanus:20170625144715j:plain

 

ボタンのほうで右クリック(またはctrl+クリック)で黒い画面を表示させる。
Sent EventsのTouch Up Insideの右の○を、接続したいメソッドへドラッグ&ドロップする。

f:id:mocotanus:20170625145340j:plain

 

ビルドしてシミュレーターで確認してみてください。呼ばれるようになっているはずです。

 

予防法

Bar Button Itemを選択している状態の表現と、
ボタンを選択している状態の表現が違うので、目で見て気をつける。

・Bar Button Itemのときは角丸なしの四角形で選択状態

f:id:mocotanus:20170625150447j:plain

 

・ボタンのときは角丸の四角形で選択される

f:id:mocotanus:20170625150533j:plain

 

リストから接続すると確実。


トーリーボードからボタンを選択したいときは、ダブルクリック(ゆっくり2回クリックでもできた)すれば、Bar Button Itemじゃなくてボタンのほうを選択できる。