読者です 読者をやめる 読者になる 読者になる

tvOS + UIButton + touchUpInside = 動かない

tvOSアプリを書いている時にハマったのでメモ。
結論としては、tvOSの場合、TouchUpInsideではなくPrimaryActionTriggeredを使うべき、という話です。

遭遇した現象

  • tvOSのstoryboardにおいて、UIButtonを設置
  • 設置したUIButtonに対してTouchUpInsideを設定
  • ビルドを実行し、ButtonをSiri Remoteからクリック
  • 実行されない\(^o^)/

公式ドキュメントにも記載なし

何か設定を間違ったかと思い、UIControl Class Referenceを確認してみましたが、tvOSに関する記述が特にあるわけでもありません。。。

Apple Developer Forumsで社員がアドバイス

同じような問題でハマった人がApple Developer Forumsで質問したところ、 Appleの社員から以下のような回答が。
TouchUpInside is triggered by actual touches, which isn't really what you wanted here: if you want the Select button press on the remote to trigger your button, you should use PrimaryActionTriggered
これに従うとすると、tvOSでは、UIControlEvents.Touch...系のイベントは使えなさそうですね。。。

まとめ

tvOSは開発者が少ない分、まだノウハウも蓄積されておらず、色々と落とし穴にハマることが多そうですね。。。

参考