我有一个包含自定义单元格的tableview,其中包含一系列项目。我初始化一个空数组和一些像这样的数据
var venues = [String]()
var images = [String]()
var nycVenues = ["Webster Hall", "Output", "The Woods"]
var nycImages = ["Webster", "Output", "Woods"]
然后,根据页面标题的内容,该数组将填充相应的数据。这是我在cellForRowAt indexPath中的代码
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! VenueCell
if (self.navigationItem.title == "NYC Venues") {
nycVenues = venues //fill the empty venue array with nycVenues
nycImages = images //fill the empty images array with nycImages
cell.textLabel?.text = venues[indexPath.row]
DispatchQueue.main.async {
cell.venueImageView.image = UIImage(named: images[indexPath.row])!
}
}
//.....other venues set up the same way
return cell
}
部分
中的行数override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return venues.count
}
设置单元格的高度
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 72
}
这是我的自定义单元格
class VenueCell: UITableViewCell {
override func layoutSubviews() {
super.layoutSubviews()
textLabel?.frame = CGRect(x: 100, y: textLabel!.frame.origin.y - 2, width: textLabel!.frame.width, height: textLabel!.frame.height)
detailTextLabel?.frame = CGRect(x: 64, y: detailTextLabel!.frame.origin.y + 2, width: detailTextLabel!.frame.width, height: detailTextLabel!.frame.height)
}
let venueImageView: UIImageView = {
let imageView = UIImageView()
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.layer.masksToBounds = true
imageView.contentMode = .scaleAspectFill
return imageView
}()
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: .subtitle, reuseIdentifier: reuseIdentifier)
addSubview(venueImageView)
venueImageView.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 8).isActive = true
venueImageView.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
venueImageView.widthAnchor.constraint(equalToConstant: 48).isActive = true
venueImageView.heightAnchor.constraint(equalToConstant: 48).isActive = true
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
问题是,当表格视图出现时,它只显示一个空的默认tableview(不符合我的自定义单元格,并且没有任何项目)。有人知道我错过了什么吗?
答案 0 :(得分:0)
正如评论中提到的paulw11所述venues
和images
数组的分配应该在调用 tableView(_ tableView: UITableView, numberOfRowsInSection section: Int)
之前。因此,在viewDidLoad
中进行分配应该可以解决问题。
您的问题出在tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
。检查if
语句并更改这两行
nycVenues = venues //fill the empty venue array with nycVenues
nycImages = images //fill the empty images array with nycImages
到
venues = nycVenues //fill the empty venue array with nycVenues
images = nycImages //fill the empty images array with nycImages