【发布时间】:2018-08-24 14:23:13
【问题描述】:
我在这方面花了很多时间。当从 tableView 设置属性时,UITableViewCell 的主/超类的属性 (isSender) 始终返回 nil:
这是主单元类:
class MasterTableViewCell: UITableViewCell {
@IBOutlet weak var userProfileImage:UIImageView!
@IBOutlet weak var postTextLabel:UILabel!
var isSender:Bool!
override func awakeFromNib() {
// code here
}
这是 Cell 子类:
class VideoPostTableViewCell: MasterTableViewCell {
@IBOutlet weak var playButton: UIButton!
override func awakeFromNib() {
super.awakeFromNib()
if isSender == true {
print("true")
}
else {
print("false")
}
这是tableView 方法:
func configureCell(indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "VideoPostTableViewCell") as? VideoPostTableViewCell else {
return UITableViewCell()}
let x = post.userID
let y = user?.uid
let isEqual = (x == y)
cell.isSender = isEqual
return cell
isSender 总是返回 nil
注意:当我直接在VideoPostTableViewCell 中设置isSender 时,也会返回nil。此外,当我在 let isEqual = (x == y) 设置断点时,isEqual 返回 true
最后,VideoPostTableViewCell 和MasterTableViewCell 中的其他属性都使用tableView 中的相同方法正确设置。我已将它们排除在外以减少代码。
非常感谢任何帮助。谢谢!
【问题讨论】:
-
所以它总是打印
false? -
正确,isSender 总是返回 nil,因此它打印“false”。但是,我知道 isEqual(在设置它的 tableView 方法中)返回 true。
-
您正在评估
if isSender == true内部awakeFromNib()... 这发生在您执行cell.isSender = isEqual之前。 -
你能在
cell.isSender = isEqual之后打印isSender吗 -
DonMag - 是的,如果我在 MasterTableViewCell 中添加一个类方法以在 tableView 的 conigureCell 中设置 isSender,我会正确设置 Bool。谢谢!
标签: ios swift uitableview subclass