将 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