以编程方式点击视图

Programmatically Tap View

我创建了一个自定义视图,用作带有图像和文本的单选按钮。我需要能够在控制器加载时加载保存的 selection。我这样设置我的听众:

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.

        ...
    }
}

问题是我找不到将视图告诉 select 的方法。我尝试制作手势识别器和对象,但它没有任何可用于触发它的方法。 'buttons' 实际上不是按钮,它们是视图,所以我无法发送操作事件。

如何 select 正确的按钮代码?

您可以像这样在自定义视图中添加此方法,

Class CustomView: UIView {

    public func select(_ value: Bool) {
       self.backgroundColor = value ? .green: .red
    }
}

然后在下面的方法中,您可以为点击的视图调用 select

@objc private func genderTapped(_ sender: UITapGestureRecognizer) {
   (sender.view as? CustomView)?.select(true)
}

只需直接调用 genderTapped,将已附加到所需 "button" 的手势识别器交给它即可。

例如,如果 thisGenderButton 是您想要 "tap" 的那个,请说:

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