Search code examples
iosswiftuiviewuitapgesturerecognizer

Programmatically Tap View


I have created a custom view that is to be used as a radio button with images and text. I need to be able to load the saved selection when the controller loads. I set my listeners this way:

for button in genderButtons {
    button.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(genderTapped(_:))))
}

@objc private func genderTapped(_ sender: UITapGestureRecognizer) {
    for button in genderButtons {
        button.select(sender.view! == button) // Toggles the button to display selected/deslected state.

        ...
    }
}

The problem is that I can't find a way to tell the view to select. I tried making the gesture recognizer and object, but it doesn't have any methods I can use to trigger it. The 'buttons' aren't actually buttons, they're views, so I can't send an action event.

How can I select the correct button with code?


Solution

  • Just call genderTapped directly, handing it the gesture recognizer already attached to the desired "button".

    For example, if thisGenderButton is the one you want to "tap", say:

    if let tap = thisGenderButton.gestureRecognizers?[0] as? UITapGestureRecognizer {
        genderTapped(tap)
    }