【Swift/UIKit】コードからビューのタップイベントを発行する方法!sendActions
この記事からわかること
- SwiftのUIKitでタップイベントを発行する方法
- コードからボタンをタップするには?
- sendActionsメソッドの使用方法
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Xcode:14.3.1
- iOS:16.4
- Swift:5.8.1
UIKitでコードからタップイベントを発火させる方法!
ボタンを実際にタップせずにコードから任意のタイミングでタップイベントを発行するにはUIControl
クラスの持つsendActions
メソッドを使用します。
class ViewController: UIViewController {
private var button:UIButton!
override func viewDidLoad() {
super.viewDidLoad()
button = UIButton(type: .system)
button.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
button.center = view.center
button.setTitle("Button", for: .normal)
button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
view.addSubview(button)
// ボタンタップイベントの発行
handleButtonTap()
}
// ボタンのタップイベントを呼び出す
func handleButtonTap() {
print("コードからイベント発火")
button.sendActions(for: .touchUpInside)
}
@objc func buttonAction() {
print("ボタンがタップされたよ")
}
}
sendActionsメソッド
func sendActions(for controlEvents: UIControl.Event)
sendActions
メソッドは指定されたイベントに関連付けられたアクションメソッドを呼び出すUIControl
クラスが持つメソッドです。引数にはUIControl.Event
型でイベントの種類を指定します。
UIViewなどのタップイベントは発行できない?
UIViewなどUIControl
を継承していないものでも以下のようにタップイベント自体を実装することは可能ですが、sendActions
メソッドは保持していないためタップイベントを明示的に呼び出すことはできません。とはいえ普通にタップ後に実行したい処理を呼び出せば良いだけですが。
private var myView:UIView!
override func viewDidLoad() {
super.viewDidLoad()
myView = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
myView.center = view.center
myView.backgroundColor = .orange
// タップジェスチャーをビューに追加
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(viewTapped))
myView.addGestureRecognizer(tapGesture)
view.addSubview(myView)
// 任意の座標を指定してUIViewのタップイベントを呼び出す
handleViewTap()
}
@objc func viewTapped() {
print("View tapped.")
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。