关于这件事情好像很热门的问题我都看完了。无论如何,我已经创建了一个简单的应用程序,其中包含一个使用自定义单元格的 TableView 。 我使用 Storyboard,并使用与我创建的类相同的名称定义单元格,Xcode 甚至自动完成了我。 虽然当我初始化一个新单元格时,我无法更改单元格中包含的标签和图像的属性。我收到一条错误消息,说我访问了一个 nil,我有点明白了。尽管我似乎找不到解决方法。有人可以帮忙吗?
import UIKit
class ExtenderCell: UITableViewCell {
@IBOutlet var main_image: UIImageView!
@IBOutlet var name_label: UILabel!
@IBOutlet var desc_label: UILabel!
init(to_put_image: UIImage, name: String, desc:String){
super.init(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell")
name_label.text = name
desc_label.text = desc
main_image.image = to_put_image
}
}
最佳答案
您正在使用 storyBoard
通过 outlets
创建单元格。直到 awakeForNib( )
使用 storyBoard
因为它在 awakeFromNib
之前未解压缩。 您的 outlets 或 properties
在 中为 nil init
所以当您尝试在 init
方法中unwrap nil outlet property
时出现此异常。
由于您的outlet 属性
在init
方法中不可访问并且它们在init
中为nil。所以您需要设置您的
。或者您可以在 awakeForNib()
中的 outletscellForRowAtIndexPath
中设置属性。因此,最好的方法是将 init
方法设置为实例方法
如果你想使用storyBoard
。
import UIKit
class ExtenderCell: UITableViewCell {
@IBOutlet var main_image: UIImageView!
@IBOutlet var name_label: UILabel!
@IBOutlet var desc_label: UILabel!
func setContents(to_put_image: UIImage, name: String, desc:String){
name_label.text = name
desc_label.text = desc
main_image.image = to_put_image
}
}
在cellForRowAtIndexPath
中设置单元格的内容
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
//Check your identifier in storyBoard is "cell"
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as ExtendedCell
cell.setContents(yourImage, name: yourName, desc: yourDescription)
return cell
}
关于ios - 无法更改 Swift iOS 自定义单元格属性(展开空可选),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25105028/