【问题标题】:Instantiate UITableViewCell For Use Outside of TableView Methods实例化 UITableViewCell 以在 TableView 方法之外使用
【发布时间】:2016-02-24 00:06:10
【问题描述】:

对此可能有一个简单的答案。

我正在尝试从我的自定义 tableviewcell 访问变量,我尝试了多种方式实例化单元格,每次我收到一个错误指出该值为 nil,因此让我相信我没有正确初始化单元格.

我知道要实例化 viewcontroller 我会做一些事情,例如:

 let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("UserProfile") as! UserProfileViewController

有没有类似的方法来初始化tableviewcell

澄清:

我想做一些事情,例如:

func doSomethign() {
   let cell = CustomTableViewCell()

   cell.user = username
}

【问题讨论】:

    标签: swift swift2


    【解决方案1】:

    您不应该以这种方式直接创建单元格。相反,您首先注册您的单元格以供重复使用:

    tableView.registerNib(UINib(nibName: "yourNib", bundle: nil), forCellReuseIdentifier: "CellIdentifier")
    

    然后在需要时将单元格出列:

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("CellIdentifier", forIndexPath: indexPath)
        cell.user = username
        return cell
    }
    

    这是因为 tableView 将重用已滚动到屏幕外的单元格以提高性能。请注意,它要求您将单元格的重用标识符设置为正确匹配。

    【讨论】:

      【解决方案2】:

      正确的方法是你根本不应该这样做。正如迈克尔指出的那样,TableView 重用了单元格,因此虽然可以获得对单元格的引用,但只有在单元格已经创建并且没有因此出列以供重用时才有可能。在这种情况下,您应该做的是更新您的模型,然后告诉TableView 重新加载与正确模型对象对应的索引处的单元格。这样,您的应用程序就遵循 MVC 设计,并且可以更好地防止由于零单元引用而导致的崩溃。

      【讨论】:

      • 有趣的是人们会如何在不解释原因的情况下对我们俩投反对票。
      猜你喜欢
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 2020-04-13
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多