2014-09-27 91 views
10

我正在使用IOX8和Xcode 6.我在故事板中创建了一个具有customtype单元格的表格,并且我在其中放置了一个标签。我在IB中为标签输入了一个标签号码,以便我可以在我的代码中检索对该标签​​的引用。 但是,当我试图去在我的“的cellForRowAtIndexPath”标签的参考,使用viewWithTag我得到一个NIL的标签:为什么UItableViewCell viewWithTag返回nil?

这是两行代码,在的cellForRowAtIndexPath很重要:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"PlayerCell"]; 


UILabel *nameLabel = (UILabel *)[cell viewWithTag:1]; 

“cell viewWithTag:1”行返回NIL,我不明白为什么。

我也试过“cell.contentView withWithTag:1”,这也没有工作。

这是IOS 8或Xcode 6中的错误吗?

感谢

-Malena

+0

细胞呢?它是否也返回零,以及单元格?在我的情况下,我得到零的细胞。 – 2014-10-08 06:00:36

+0

这个问题的答案是[这里] [1] [1]:http://stackoverflow.com/questions/26344106/viewwithtag-returns-nil-on-uitableviewcell-only-first-time – 2015-05-20 07:34:30

+0

也许你正在加载数据视图是可见的之前...尝试重新加载数据在viewDidAppear – Yanchi 2015-05-31 13:38:15

回答

0

尝试调试视图层次。

  • 在调试模式下运行您的应用程序;
  • 转到视图,其中UITableViewController位于;
  • 在Xcode中点击:Debug-> View Debugging-> Capture View Hierarchy;
  • 检查天气标签是否正确分配。
+0

好技巧,但不适用于这个问题。 – c9s 2015-03-10 02:00:17

5

我在使用IOS8和Xcode 6.1时遇到了同样的问题。我发现如果我启用Size ClassesviewWithTag总是返回nil。我认为这可能是Xcode 6.x的一个缺陷。只要禁用Size Classes,一切都会好起来的。

+0

这个工程,这很奇怪。 – c9s 2015-03-10 02:00:32

11

取消选中故事板中的Size Classes选项并清除&构建应用程序。 它应该现在工作。

+2

如果我需要启用** Size Classes **,是否有解决方法? – 2015-04-15 17:52:47

+3

取消清洁&生成和重新检查尺寸类选项 – 2015-04-15 18:36:06

0

如果初始视图控制器是我的tableview,那么一切按预期工作。当它来自另一个视图控制器时,我遇到了问题。

在我的情况,在以前的视图控制器我有:

RoutePreview *rs = [[RoutePreview alloc] init]; 
rs.rota = [availableRoutes objectAtIndex:indexPath.row]; 

[self.navigationController pushViewController:rs animated:YES]; 

我把它换成这与

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"SBIPhone" bundle:[NSBundle mainBundle]]; 
RoutePreview *xpto = [storyboard instantiateViewControllerWithIdentifier:@"RouteSummary"]; 
xpto.rota = [availableRoutes objectAtIndex:indexPath.row]; 
[self.navigationController pushViewController:xpto animated:YES]; 

问题不见了。

基本上不是直接实例化tableviewcontroller,而是通过标识符实例化它,并且不再有更多的nill单元格在tableView dequeueReusableCellWithIdentifiercell viewWithTag:返回零。

2

尽量使视图“installed”,看看这个link

+1

需要对此“已安装”尺寸类进行一些认真的工作! – 2016-05-02 10:59:28

0

我的UITableViewCell,一个在哪里我把它标记号的故事板,一个在我的代码mistakingly了2个原型在哪里注册它的Nib文件。这引起了混淆,我无法用标签获得视图。 我的例如, let nib = UINib(nibName: "DetailTableViewCell", bundle: nil) tableView.register(nib, forCellReuseIdentifier: "headerViewCell")

从我的代码中删除上面的代码解决了这个问题。希望这可以帮助任何有类似问题的人。