gpt4 book ai didi

ios - 在 UITableViewController 中使用自定义单元格时如何防止获取 nil 界面元素?

转载 作者:行者123 更新时间:2023-11-28 15:06:09 24 4
gpt4 key购买 nike

这个站点和其他站点上有很多很多问题解决了从尝试在自定义表格 View 单元格。

如何防止界面元素在设置时变为 nil?

我已完成作业并查看了这些相关问题的答案。

  • 我已经确定我没有在 viewDidLoad 中注册类,因为我使用的是 UITableViewController。

  • 在 Main.storyboard 文件中正确引用了 UITableViewController。

  • UITableViewController 中的单元格被赋予了正确的 reuseIdentifier 和类。

  • 我对 tableView 的 dequeueReusableCell 调用具有正确的标识符,与 Storyboard 中的标识符匹配。

  • 我弄坏了 Nib 的 socket 并重新连接了它们。

我正在设置一个 UITableViewController,“FindTableViewController”。

class FindTableViewController: UITableViewController {

var services = Fetch().getServices()

override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
/*Sections & rows defined here*/
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Monk", for:indexPath) as! Monk
let service = services[indexPath.row]
cell.set(service)
return cell
}
}

在另一个文件中,我定义了自定义单元格 Monk。

import UIKit

class Monk: UITableViewCell {

@IBOutlet weak var titleImage: UIImageView!
//other outlets defined here

override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}

override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}

func set(_ service:Service) {
if let imgv = self.titleImage {
imgv.image = service.image
} else {
print(self.titleImage)
}
self.titleLabel.text = service.title
/*other elements set here*/
}
}

我有一种感觉,我做了一些非常、真的愚蠢的事情。

我已将自定义类名称设置为 Monk,并将单元标识符设置为 Monk,因为我不希望这种混淆成为问题的根源,并且使名称不同并不能解决问题。

enter image description here

enter image description here

我什至打印了服务对象中的值,它们符合预期。

if let imgv = self.titleImage  {
imgv.image = service.image
} else {
print(self.titleImage)
}

打印“nil”并在下一行抛出错误,

self.titleLabel.text = service.title

我还将 Nib 的标识符和类别设置为“僧侣”。

最佳答案

这很简单。

如果您为您的手机使用自定义 NIB,则您需要注册它。

viewDidLoad 中的类似内容:

let myNib = UINib(nibName: "MonkCell", bundle: nil)
tableView.register(myNib, forCellReuseIdentifier: "Monk")

如果您选择直接在 Storyboard中为您的 View Controller 布置单元格,则这是不必要的。

关于ios - 在 UITableViewController 中使用自定义单元格时如何防止获取 nil 界面元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48449529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com