【发布时间】:2021-06-09 14:47:40
【问题描述】:
我正在尝试使用 .xib 文件在 TableViewCell 中创建可重用视图。我将所有需要的数据提供给 TableViewCell,它有一个 UIView,它是我的可重用 .xib。我在 UIView 中正确打印了初始化函数,但模拟器屏幕中没有显示任何内容。找不到原因,我现在卡了很长时间。
哪个与我的 UIView 正确关联:
import Kingfisher
class DebateBoxView: UIView {
@IBOutlet var debateBoxView: UIView!
@IBOutlet weak var debateBoxImage: UIImageView!
@IBOutlet weak var debateBoxTitle: UILabel!
var debate: Debate! {
didSet {
debateBoxImage.kf.setImage(with: URL(string: debate.imageURL))
debateBoxTitle.text = debate.name
}
}
override init(frame: CGRect){
super.init(frame: frame)
self.commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.commonInit()
}
func commonInit(){
let bundle = Bundle(for: LogoraApp.self) // I'm not using "Bundle.main" because it is a framework.
bundle.loadNibNamed("DebateBoxView", owner: self, options: nil)
debateBoxView.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(debateBoxView)
debateBoxView.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
debateBoxView.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
debateBoxView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
debateBoxView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
}
}
在我的 tableViewCell 中:
import UIKit
class DebateBox: UITableViewCell {
@IBOutlet weak var debateBoxView: DebateBoxView!
}
然后在tableView本身:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = searchResultsTableView.dequeueReusableCell(withIdentifier: "searchDebateBox", for: indexPath) as! DebateBox
cell.debateBoxView.debate = debateSearchResults[indexPath.row]
return cell
}
【问题讨论】:
-
您是否忘记输入 xib 的标识符?
-
控制台有错误吗?
-
我在控制台中没有错误。 @stackich 我应该在 xib 哪里放置标识符?我将它与我的 UIView 链接为 xib 的文件所有者并添加了一个出口。
-
打开xib然后打开属性检查器,你会看到
identifier作为第一个字段。 -
不,只有模拟指标和视图部分。
标签: ios swift storyboard xib