Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 实例化UITableViewCell以在TableView方法之外使用_Swift_Swift2 - Fatal编程技术网

Swift 实例化UITableViewCell以在TableView方法之外使用

Swift 实例化UITableViewCell以在TableView方法之外使用,swift,swift2,Swift,Swift2,对此可能有一个简单的答案 我试图从自定义的tableviewcell中访问变量,我尝试了多种方式实例化单元格,每次我都会收到一个错误,指出值为零,从而使我相信我没有正确初始化单元格 我知道要实例化一个viewcontroller,我会执行以下操作: let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("UserProfile") as! UserProfileViewC

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

我试图从自定义的
tableviewcell
中访问变量,我尝试了多种方式实例化单元格,每次我都会收到一个错误,指出值为零,从而使我相信我没有正确初始化单元格

我知道要实例化一个
viewcontroller
,我会执行以下操作:

 let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("UserProfile") as! UserProfileViewController
func doSomethign() {
   let cell = CustomTableViewCell()

   cell.user = username
}
是否有类似的方法初始化
tableviewcell

请澄清:

我想做一些事情,比如:

 let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("UserProfile") as! UserProfileViewController
func doSomethign() {
   let cell = CustomTableViewCell()

   cell.user = username
}

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

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将重用屏幕外滚动的单元格以提高性能。请注意,它要求您将单元格的重用标识符设置为正确匹配。

您不应以这种方式直接创建单元格。相反,您首先要注册单元格以便重新使用:

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将重用屏幕外滚动的单元格以提高性能。请注意,它要求您将单元的重用标识符设置为正确匹配。

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

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

有趣的是,人们会投票反对我们两人,却对为什么不作任何评论。有趣的是,人们会投票反对我们两人,却对为什么不作任何评论。