表格视图显示为空而不符合我的自定义单元格
Posted
技术标签:
【中文标题】表格视图显示为空而不符合我的自定义单元格【英文标题】:Table view showing up empty instead of conforming to my custom cell 【发布时间】:2016-12-05 20:23:15 【问题描述】:我有一个带有自定义单元格的表格视图,其中包含一组项目。我初始化了一个空数组和一些类似的数据
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")
问题是当表格视图出现时,它只显示一个空的默认表格视图(不符合我的自定义单元格,并且没有任何项目)。有人知道我在哪里遗漏了什么吗?
【问题讨论】:
nycVenues = venues
行将填充的数组替换为空数组,而不是相反。
Rmaddy 是对的。这是一个很好的例子,说明为什么你应该使用let
而不是var
来处理不会/不应该改变的数据。如果你这样做了,那么编译器会给你一个错误,你就会避免一个微不足道的错误。
cellForRowAt
也是放置该代码的错误位置。
Rmaddy,谢谢我更改了它,但问题仍然存在。应该说,如果我在numberOfRows中返回3而不是venues.count,一切正常
【参考方案1】:
更新
正如下面 cmets 中提到的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
【讨论】:
这很尴尬.. 但是在进行更改后,问题仍然存在,只是显示一个空的默认表格视图。 另外,如果我更改 numberOfRows 以返回一个常量,比如 return 3,那么一切都会完美显示。但是当我返回venues.count 时,我得到了没有自定义单元格的空表视图。 您是否更改了分配数组的位置?您需要在viewDidLoad
中进行操作。通过在cellForRow
中执行此操作,计数为 0,因此永远不会调用 cellfrorRow
。当您返回一个常量计数时,它会被调用并分配数组以上是关于表格视图显示为空而不符合我的自定义单元格的主要内容,如果未能解决你的问题,请参考以下文章
如何从表格视图的自定义单元格内的文本字段中获取值(标签)以发布到 URL [重复]