在iOS开发中,使用Swift语言时,遇到UIButton
显示和淡入子视图时崩溃,并提示“发送了无法识别的选择器”,通常是由于以下几个原因造成的:
确保你尝试调用的方法已经在类中正确实现。
@objc func okButtonPressed() {
// 实现按钮被按下时的逻辑
}
并且在按钮的 addTarget 方法中正确指定了选择器:
okButton.addTarget(self, action: #selector(okButtonPressed), for: .touchUpInside)
确保方法的签名与选择器中的签名完全一致。例如,如果你使用了 @objc
属性,确保方法名和参数类型都正确。
如果你在某个地方尝试将 UIButton 转换为自定义的子类,并且该子类没有实现相应的方法,也会导致崩溃。
if let customButton = button as? CustomButton {
customButton.addTarget(self, action: #selector(customButton.okButtonPressed), for: .touchUpInside)
}
确保 CustomButton
类中实现了 okButtonPressed
方法。
如果在闭包中使用 self,确保 self 被正确地作为弱引用捕获,以避免循环引用。
okButton.addTarget(self, action: #selector(okButtonPressed), for: .touchUpInside)
在闭包中:
{ [weak self] in
guard let self = self else { return }
// 使用 self
}
以下是一个完整的示例,展示了如何为 UIButton 添加点击事件并处理淡入子视图的逻辑:
import UIKit
class ViewController: UIViewController {
let okButton = UIButton(type: .system)
let subview = UIView()
override func viewDidLoad() {
super.viewDidLoad()
setupButton()
setupSubview()
}
func setupButton() {
okButton.setTitle("OK", for: .normal)
okButton.addTarget(self, action: #selector(okButtonPressed), for: .touchUpInside)
view.addSubview(okButton)
// 设置按钮布局...
}
func setupSubview() {
subview.backgroundColor = .blue
view.addSubview(subview)
subview.alpha = 0 // 初始时透明
// 设置子视图布局...
}
@objc func okButtonPressed() {
UIView.animate(withDuration: 0.3) {
self.subview.alpha = 1 // 淡入子视图
}
}
}
这种技术在用户界面交互中非常常见,例如在表单验证、模态弹窗显示、动态内容加载等场景中,通过按钮触发视图的显示和隐藏动画。
通过以上步骤,你应该能够解决“发送了无法识别的选择器”的问题,并确保 UIButton 正确响应点击事件,实现子视图的淡入效果。
领取专属 10元无门槛券
手把手带您无忧上云