当前位置: 首页 > 知识库问答 >
问题:

Xib文件UITableViewCell出口为零

祁鸿哲
2023-03-14

这有点正在进行的话题,但我的情况略有不同。我在用这个教程。我有一个视图控制器,它有自己的故事板,这个视图控制器有表视图。视图控制器是此表的委托和数据源。我需要添加不同类型的单元格到这个表中,我也使用单元格视图模型。

单元格:

class TitleTextCell: UITableViewCell, CellConfigurable {
        
        @IBOutlet weak var titleLabel: UILabel!
        @IBOutlet weak var textView: UITextView!
        static let identifier = "TitleTextCell"
        
        
        func setup(viewModel: RowViewModel) {
            guard let titleTextViewModel = viewModel as? TitleTextViewModel else {return}

            titleLabel.text = titleTextViewModel.title //fatal: found nil while 
            textView.text = titleTextViewModel.text    //unwrapping an optional value
        }
    }

表视图控制器的ViewController:

class InfoViewController: UIViewController, Storyboarded {
        // MARK: - Properties
        var viewModel: InfoViewModelType! {
            didSet {
                viewModel.viewDelegate = self
            }
        }
        
        // MARK: - Outlets
        @IBOutlet weak var tableView: UITableView!
        
        // MARK: - Lifecycle Methods
        override func viewDidLoad() {
            super.viewDidLoad()
            tableView.register(TitleTextCell.self, forCellReuseIdentifier: TitleTextCell.identifier)
            tableView.delegate = self
            tableView.dataSource = self  
        }
    }

    extension InfoViewController: UITableViewDelegate, UITableViewDataSource {
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return viewModel.tableRows.count
        }
        
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let rowViewModel = viewModel.tableRows[indexPath.row]
            let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier(for: rowViewModel), for: indexPath)
            if let cell = cell as? CellConfigurable {
                cell.setup(viewModel: rowViewModel)
            }
            return cell
        }
        
        private func cellIdentifier(for viewModel: RowViewModel) -> String {
            switch viewModel {
            case is TitleTextViewModel:
                return TitleTextCell.identifier
            default:
                fatalError("Unexpected view model type: \(viewModel)")
            }
        }
    }

共有1个答案

宰父俊彦
2023-03-14

你需要

tableView.register(UINib(nibName: "TitleTextCell", bundle: nil), forCellReuseIdentifier: TitleTextCell.identifier)

对于xib单元格

 类似资料:
  • 问题内容: 我有一个使用自定义方法连接到xib 的子类。 有没有办法可以在方法中初始化此单元格并仍然重用它?还是我必须使用重用标识符注册类本身? 问题答案: 惯用的NIB流程为: 使用重用标识符注册您的NIB。在Swift 3中 } 在Swift 2中: 定义您的自定义单元格类: class NameInput: UITableViewCell { } 在Interface Builder中创建一

  • 问题内容: 我正在这样做,我想使用CollectionView,但我还没有看到原型单元,也不知道在这种情况下如何使用CollectionView,有人可以帮助我吗? 我尝试以这种方式使用,但是比UICollectionView要花很多时间并且很难管理 问题答案: 使用UICollectionView的主要方法是通过编程方式管理逻辑。 首先,创建一个继承自的新类。选择是否要包含xib来轻松设计单元格

  • 问题内容: 我已经阅读了使用XCode故事板来实例化使用XIB进行设计的视图控制器,但是在Swift中使用XCode进行工作时遇到了麻烦(使用Xcode 6 Beta 6)。我想知道我做错了什么还是该功能不再可用? 我创建了一个简单的存储库https://github.com/jer-k/StoryboardTesting- Swift ,展示了上述方法。 我设法通过在init中添加和覆盖来解决此

  • 问题内容: 我可以像下面这样以编程方式创建简单的自定义viewForHeaderInSection。但是我想做更多复杂的事情,例如与不同的类连接,并像tableView单元格一样达到其属性。简而言之,我想看看我在做什么。 有没有人可以解释如何使用xib创建自定义tableView标头视图?我遇到过旧的Obj-C主题,但是我是Swift语言的新手。如果有人详细解释,那太好了。 1.问题: 按钮@IB

  • 问题内容: 我在Interface Builder中创建了一个自定义UICollectionViewCell,将其上的视图绑定到该类,然后当我想使用并将字符串设置为字符串上的标签时,tha标签的值为nil。 和子类的单元格: 问题答案: 我再打一次。 如果您使用的是情节提要,则不想调用此功能 。它将覆盖情节提要中的内容。 如果您仍然有问题请检查是否是 相同 的 ,并 在。

  • web项目入口文件为public/index.php ThinkCMF5 采用单一入口文件模式,所以部署项目时请把项目根目录设置到 public 目录;入口文件主要完成一些常量,和路径配置,大致代码如下 // 调试模式开关 define("APP_DEBUG", true); // 定义CMF根目录,可更改此目录 define('CMF_ROOT', __DIR__ . '/../'); //