无法将 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
终于经过数小时的修补。
Class现在;
import UIKit
class CardView: UIView {
var uid: String!
@IBOutlet weak var profileImage: UIImageView!
@IBOutlet weak var nameLabel: UILabel!
}
已删除文件所有者
- xib 中的 CardView 现在设置为 CardView
现在是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" :)
我正在尝试实现 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
终于经过数小时的修补。
Class现在;
import UIKit class CardView: UIView { var uid: String! @IBOutlet weak var profileImage: UIImageView! @IBOutlet weak var nameLabel: UILabel! }
已删除文件所有者
- xib 中的 CardView 现在设置为 CardView
现在是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" :)