将 UITableViewController 转换为 SwiftUI 后,UITableViewCell 中的视图为零
Posted
技术标签:
【中文标题】将 UITableViewController 转换为 SwiftUI 后,UITableViewCell 中的视图为零【英文标题】:Views inside UITableViewCell are nil after converting UITableViewController to SwiftUI 【发布时间】:2020-02-29 13:15:50 【问题描述】:我正在将 UITableViewController 代码移植到 SwiftUI。我已经为它创建了一个 UIViewControllerRepresentable 结构。除了以下两个之外,一切正常:
-
在 UITableViewCell 中有一个 UIView 和一个 UILabel。这两个通过插座连接到代码,它们在 UIKit 项目中完美运行。但是,当通过 SwiftUI 项目中的 UIViewControllerRepresentable 类访问时,这两者都是 nil 。我可以访问 cell.textLabel,它告诉我单元格已被初始化。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! DepartmentTVCell
// Error: The label & cell are nil at runtime
cell.label.text = departmentsFRC?.object(at: indexPath).name
cell.view.backgroundColor = .random()
// Issue: Only the below code works
cell.textLabel?.text = departmentsFRC?.object(at: indexPath).name
return cell
-
UIKit 项目中的 UITableViewController 不需要注册单元,因为原型单元是通过故事板连接的。但是,在 SwiftUI 版本中,单元格的自定义类只有在它被注册时才有效。没关系,但有人知道为什么会这样吗?
我已将工作项目上传到https://github.com/felixmariaa/PortTVCToSwiftUI。非常感谢您对此提供任何帮助。
谢谢。
【问题讨论】:
【参考方案1】:因为您在Storyboard
中定义了您的单元格,所以无需调用registerCell
func,也无需在表格视图中注册单元格。此外,您应该将您的 makeUIController
更改为从情节提要中获取您的 VC:
func makeUIViewController(context: UIViewControllerRepresentableContext<DepartmentTVCRepresentable>) -> DepartmentTVC
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let departmentTVC = storyboard.instantiateViewController(identifier: "DepartmentVC") as! DepartmentTVC
return departmentTVC
不要忘记为视图控制器故事板设置 identifire,因为我在这里设置了 DepartmentVC
【讨论】:
谢谢。有用。仅供参考,看起来您错过了删除代码中的 departmentTVC.registerCell() 。以上是关于将 UITableViewController 转换为 SwiftUI 后,UITableViewCell 中的视图为零的主要内容,如果未能解决你的问题,请参考以下文章
我想通过在 Swift 中以编程方式将 UINavigationController 与 UITableViewController 嵌入 UITableViewController 这是 UITab
手动将 UITabBar 添加到 UITableViewController
将 UITableViewController 插入其他 UIView
将 NSMutableArray 传递给 UITableViewController
如何将 UITableViewController 创建为可重用模块?
将 UINavigationBar 添加到没有 UINavigationController 的 UITableViewController