创建自定义 xib 类的实例使手势识别器不起作用

Posted

技术标签:

【中文标题】创建自定义 xib 类的实例使手势识别器不起作用【英文标题】:create instance of custom xib class make gesture recognizer don't work 【发布时间】:2020-09-03 14:55:49 【问题描述】:

首先我创建一个 .xib 文件并将其命名为 RadioBtnView 并将其连接到自定义 UIView 类:

class CheckBtnView: UIView 
    @IBOutlet weak var mainView: UIView!
    @IBOutlet weak var CheckBtn: UIButton!
    @IBOutlet weak var checkDescription: UILabel!
    
    var status = false 
        didSet 
            if status 
                CheckBtn.backgroundColor = .orange
             else 
                CheckBtn.backgroundColor = .clear
            
        
    
    
    override init(frame: CGRect) 
        super.init(frame: frame)
        setupViews()
    
    
    required init?(coder: NSCoder) 
        super.init(coder: coder)
        setupViews()
    
    
    
    private func setupViews()
        Bundle.main.loadNibNamed("CheckBtnView", owner: self, options: nil)
        addSubview(mainView)
        mainView.frame = self.bounds
        mainView.autoresizingMask = [.flexibleHeight,.flexibleWidth]

    

然后尝试在 viewController 中以编程方式添加 RadioBtnView 的实例并向其添加手势识别器:

let radio = RadioBtnView()
scrollContainerView.addSubview(radio)
radio.translatesAutoresizingMaskIntoConstraints = false
radio.topAnchor.constraint(equalTo: entry.bottomAnchor, constant: 15).isActive = true
radio.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 38).isActive = true
radio.isUserInteractionEnabled = true
let radioGesture = UITapGestureRecognizer(target: self, action: #selector(change(_:)))
radio.addGestureRecognizer(radioGesture)

但是 change(_:) 函数没有响应似乎没有调用

这是用于以编程方式或其他方式创建 xib 视图吗?

【问题讨论】:

发布实际有效的代码是个好主意...您似乎正在处理CheckBtnView 类和RadioBtnView 类,并且您发布的代码将它们混合在一起。如果没有更多信息和 .xib 布局的详细信息,您很可能缺少约束。添加这一行:radio.backgroundColor = .green 并查看是否显示一个包含您的标签和按钮的绿色矩形。 【参考方案1】:

我终于知道原因了......我只是删除了radio.translatesAutoresizingMaskIntoConstraints = false并添加了radio.frame = CGRect(x:50,y:100,width:120,height:20),并且每个想法都有效 这似乎我们不能以编程方式添加 xib 视图

【讨论】:

如果您在 .xib 中正确设置了约束,则可以使用自动布局。

以上是关于创建自定义 xib 类的实例使手势识别器不起作用的主要内容,如果未能解决你的问题,请参考以下文章

iOS 9:在故事板/xib 中设置了手势识别器,以添加到多个视图(不起作用)

自定义 UICollectionViewCell 中的 UIScrollview 不起作用

自定义页脚视图没有响应我的点击手势识别器标签

使用 Xib 创建的自定义视图在 Interface Builder 中不起作用

可以使用自定义 UIViewController 但没有自定义 UIView 类来实现手势识别吗?

使用 xib 将 tapGestureRecognizer 添加到自定义 UIView