【Swift/UIKit】コードからビューのタップイベントを発行する方法!sendActions

この記事からわかること

  • SwiftUIKitタップイベント発行する方法
  • コードからボタンをタップするには?
  • sendActionsメソッドの使用方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

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メソッド

公式リファレンス:sendActions

func sendActions(for controlEvents: UIControl.Event)

sendActionsメソッドは指定されたイベントに関連付けられたアクションメソッドを呼び出すUIControlクラスが持つメソッドです。引数にはUIControl.Event型でイベントの種類を指定します。

公式リファレンス: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.")
}

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index