iOS 将自定义单元格设计放在哪里? awakeFromNib 或 cellForRowAtIndexPath?
iOS where to put custom cell design? awakeFromNib or cellForRowAtIndexPath?
所以,基本上我用笔尖制作了一个自定义单元格,希望我应用一些自定义设计,比如颜色和阴影。
我找到了两种应用样式的方法:
awakeFromNib():
override func awakeFromNib() {
super.awakeFromNib()
//Container Card Style
self.container.layer.cornerRadius = 3
self.container.setDropShadow(UIColor.blackColor(), opacity: 0.20, xOffset: 1.5, yOffset: 2.0, radius: 1.8)
//Rounded thumbnail
self.thumb_image.setRoundedShape()
self.thumb_image.backgroundColor = UIColor.customGreyTableBackground()
//Cell
self.backgroundColor = UIColor.customGreyTableBackground()
self.selectionStyle = .None
}
cellForRowAtIndexPath:(在 tableView 中希望显示单元格)
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
//get cell type
let cell = tableView.dequeueReusableCellWithIdentifier("searchResultCell", forIndexPath: indexPath) as! SearchResultCell
//Container Card Style
cell.container.layer.cornerRadius = 3
cell.container.setDropShadow(UIColor.blackColor(), opacity: 0.20, xOffset: 1.5, yOffset: 2.0, radius: 1.8)
//Rounded thumbnail
cell.thumb_image.setRoundedShape()
cell.thumb_image.backgroundColor = UIColor.customGreyTableBackground()
//Cell
cell.backgroundColor = UIColor.customGreyTableBackground()
cell.selectionStyle = .None
//cell data
if(!data.isEmpty){
cell.name_label.text = data[indexPath.row].name
cell.thumb_url = data[indexPath.row].thumb_url
}
return cell
}
在性能方面,希望一个会更好?我注意到在 awakeFromNib() 设计中只执行一次,所以这个更好?
正如你提到的 awakeFromNib 只被调用一次(当单元格被实例化时),如果它的设置东西比如背景颜色和类似的东西不会改变那么它可以在那里做,单元格定制(数据cell is showing) 应该在 cellForRowAtIndexPath 期间完成,所以你不应该检查那里的数据是否为空,而是在每次返回单元格时给它数据,这将允许你重用单元格并根据需要设置数据
希望对您有所帮助
丹尼尔
所以,基本上我用笔尖制作了一个自定义单元格,希望我应用一些自定义设计,比如颜色和阴影。
我找到了两种应用样式的方法:
awakeFromNib():
override func awakeFromNib() {
super.awakeFromNib()
//Container Card Style
self.container.layer.cornerRadius = 3
self.container.setDropShadow(UIColor.blackColor(), opacity: 0.20, xOffset: 1.5, yOffset: 2.0, radius: 1.8)
//Rounded thumbnail
self.thumb_image.setRoundedShape()
self.thumb_image.backgroundColor = UIColor.customGreyTableBackground()
//Cell
self.backgroundColor = UIColor.customGreyTableBackground()
self.selectionStyle = .None
}
cellForRowAtIndexPath:(在 tableView 中希望显示单元格)
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
//get cell type
let cell = tableView.dequeueReusableCellWithIdentifier("searchResultCell", forIndexPath: indexPath) as! SearchResultCell
//Container Card Style
cell.container.layer.cornerRadius = 3
cell.container.setDropShadow(UIColor.blackColor(), opacity: 0.20, xOffset: 1.5, yOffset: 2.0, radius: 1.8)
//Rounded thumbnail
cell.thumb_image.setRoundedShape()
cell.thumb_image.backgroundColor = UIColor.customGreyTableBackground()
//Cell
cell.backgroundColor = UIColor.customGreyTableBackground()
cell.selectionStyle = .None
//cell data
if(!data.isEmpty){
cell.name_label.text = data[indexPath.row].name
cell.thumb_url = data[indexPath.row].thumb_url
}
return cell
}
在性能方面,希望一个会更好?我注意到在 awakeFromNib() 设计中只执行一次,所以这个更好?
正如你提到的 awakeFromNib 只被调用一次(当单元格被实例化时),如果它的设置东西比如背景颜色和类似的东西不会改变那么它可以在那里做,单元格定制(数据cell is showing) 应该在 cellForRowAtIndexPath 期间完成,所以你不应该检查那里的数据是否为空,而是在每次返回单元格时给它数据,这将允许你重用单元格并根据需要设置数据
希望对您有所帮助
丹尼尔