为什么UItableViewCell viewWithTag返回nil?

时间:2014-09-27 05:14:52

标签: uitableview viewwithtag

我正在使用IOX8和Xcode 6.我在故事板中创建了一个带有自定义类型单元格的表格,并在其中放置了一个标签。我在IB中输入了标签的标签号,这样我就可以在代码中检索对标签的引用。 但是当我尝试在我的“cellForRowAtIndexPath”中获得对标签的引用时,使用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

6 个答案:

答案 0 :(得分:11)

取消选中故事板中的“大小类”选项并清除&构建应用程序。 它现在应该工作。

答案 1 :(得分:5)

我在使用IOS8和Xcode 6.1时遇到了同样的问题。我发现,如果我启用Size Classes,则viewWithTag始终返回nil。我认为这可能是Xcode 6.x的一个错误。只需禁用Size Classes,一切正常。

答案 2 :(得分:2)

尝试制作视图' installed',请检查link

答案 3 :(得分:0)

尝试调试View Hierarchy。

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

答案 4 :(得分: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,而是通过标识符对其进行实例化,而tableView dequeueReusableCellWithIdentifiercell viewWithTag:中的nill单元不再返回nil。

答案 5 :(得分:0)

我错误地制作了UITableViewCell的两个原型,一个在故事板上我给它标记号码,一个在我的代码中我注册了它的Nib文件。这引起了混乱,我无法用标签抓住视图。 我的,例如, let nib = UINib(nibName: "DetailTableViewCell", bundle: nil) tableView.register(nib, forCellReuseIdentifier: "headerViewCell")

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