从dequeueReusableCellWithIdentifier

时间:2015-12-15 02:26:59

标签: ios swift uitableview

我使用故事板来显示我的TableViewController,而且我对于使用故事板非常新,我通常都是以编程方式完成的。所以我遇到了一些问题。我使用以下代码导航到故事板:

let registerTableViewController = RegisterTableViewController()
navigationController?.pushViewController(registerTableViewController, animated: true);

简单的双线,这可能是我的问题,我不是100%肯定你是如何以编程方式转移到故事板场景,但这就是我一直以来的做法当我的所有观点都以编程方式布局时,请告诉我这是否是问题的根源。

现在,我的tableView有一个单元格,重用标识符为profileInfoCell。我把它放到一个固定的文件中,所以我知道我正确地得到它。这是我非常简单的cellForRowAtIndexPath:方法:

override func tableView(tableView:UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier(Constants.Registration.profileInfoCellIdentifier)

    return cell!
}

问题是cell被返回为零。由于我使用故事板,我认为我的设置有问题,这就是为什么我认为我可能以错误的方式移动到这个场景。如果您有任何其他信息,请告诉我们!

编辑:我没有使用静态tableView单元格。它们是原型细胞。

3 个答案:

答案 0 :(得分:3)

是的,您正在实例化视图控制器错误。通过像你一样创建它,它完全是程序化的,因此完全绕过了故事板

确保您需要在故事板中为视图控制器场景指定一个标识符。

enter image description here

<强>假设:

  • 故事板文件名:&#34; Main.storyboard&#34;
  • 查看控制器场景标识符:&#34; RegisterTableViewController&#34;

<强>目标C

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
RegisterTableViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"RegisterTableViewController"];
[self presentViewController:viewController animated:YES completion:nil];

<强>夫特

let storyboard = UIStoryboard.init(name: "Main",bundle:nil)
let viewController = storyboard.instantiateViewControllerWithIdentifier("RegisterTableViewController")
self.presentViewController(viewController, animated: true, completion: nil)

答案 1 :(得分:1)

创建视图控制器时,您没有引用故事板,因此故事板场景中的任何配置都不会应用。

您需要使用它的场景标识符从故事板中检索视图控制器实例。类似的东西:

let storyboard = UIStoryboard.init(name: "Main",bundle:nil)
let vc=storyboard.instantiateViewControllerWithIdentifier("sceneIdentifier")
self.presentViewController(vc, animated: true, completion: nil)

您需要在Interface Builder检查器中设置场景的Storyboard ID。选择橙色&#34;查看控制器&#34;在场景根部的对象,并在右侧的检查器中输入您的标识符:

enter image description here

答案 2 :(得分:1)

这就是我实现的目标

override func tableView(tableView:UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
   let cell = tableView.dequeueReusableCellWithIdentifier(Constants.Registration.profileInfoCellIdentifier)

   if (cell == nil) {
       cell = RegisterTableViewController(style: UITableViewCellStyle.Default, reuseIdentifier:Constants.Registration.profileInfoCellIdentifier)        
   }

   return cell!
}