无法将 IBOutlet 连接到 XIB 文件

Unable to connect IBOutlet to XIB File

我正在尝试实现 Koloda 刷卡方式。我创建了一个结构为图像 1 和 2 的 .xib 文件。

如您在图 1 中所见,我已将文件所有者设置为 XIB 文件自定义 class。

在图 2 中,我将 class 留空(不确定是否正确)

我的 NIB class 符合以下代码。

import UIKit
import Koloda

class CardView: KolodaView {

var view: UIView!
var nibName: String = "CardView"
var uid: String!

@IBOutlet weak var profileImage: UIImageView!
@IBOutlet weak var nameLabel: UILabel!

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    setUp()
}

override init(frame: CGRect) {
    super.init(frame: frame)
    setUp()
}

func setUp() {

    view = loadViewFromNib()

    view.frame = bounds
    view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    view.isUserInteractionEnabled = true
    addSubview(view)

}

func loadViewFromNib() -> UIView {
    let bundle = Bundle(for: CardView.self)
    let nib = UINib(nibName: String(describing: CardView.self), bundle: bundle)
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView

    return view
}
}

在我的控制器中,我有如下所示的索引视图;

func koloda(_ koloda: KolodaView, viewForCardAt index: Int) -> UIView {

    _ = userResults[Int(index)]

    let bundle = Bundle(for: CardView.self)
    let nib = UINib(nibName: String(describing: CardView.self), bundle: bundle)
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView

    return view
}

我无法插入我的 IBOutlets 并在我的 UIViewController 中引用它们。因为我将获取 geoFire 和 FirDatabase 信息并填充视图。我知道这与文件所有者有关。我只是不确定如何将 IBOutlets 设置为子视图而不是自定义 class.

感谢任何帮助。

尝试将 CardView class 设置为自定义 class CardView 而不是 UIView

终于经过数小时的修补。

  1. Class现在;

    import UIKit
    
    class CardView: UIView {
    
    var uid: String!
    
    @IBOutlet weak var profileImage: UIImageView!
    @IBOutlet weak var nameLabel: UILabel!
    
    }
    
  2. 已删除文件所有者

  3. xib 中的 CardView 现在设置为 CardView
  4. 现在是viewForCardAt;

    func koloda(_ koloda: KolodaView, viewForCardAt index: Int) -> UIView {
    
    let bundle = Bundle(for: CardView.self)
    let nib = UINib(nibName: String(describing: CardView.self), bundle: bundle)
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! CardView
    
    let users = userResults[Int(index)]
    
    view.profileImage.sd_setImage(with: URL(string: users.userProfileURL))
    view.nameLabel.text = users.userName
    view.uid = users.uid
    
    return view
    

    }

我现在有一个工作 "Tinder Card with geoLocating" :)