我正在使用带有原型单元格的 UITableView 。我正在为这些原型单元格添加自定义元素( UILabel , UIProgressView )。然后,我想使用 cellForRowAtIndexPath 中的标记初始化这些元素。
看起来像样板设计......但它不起作用。 我无法使用 viewWithTag 访问 UILabel 和 UIProgressView 组件,看起来 contentView中没有任何内容在细胞原型内。
有趣的是,它适用于 XCode 5 ,但 XCode 6 beta 3到5。 此外,当我用XCode 6打开我的项目时,最初使用XCode 5设置的设计都搞砸了。我可以手动修复它,但是后来某些物体不再可见,就像它们在屏幕外面一样。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellFileDown"];
NSLog(@"cell.contentView subViews: %@", [cell.contentView subviews]);
UILabel *nameLabel = ((UILabel *)[cell.contentView viewWithTag:10]);
nameLabel.text = @"hello test";
NSLog(@"nameLabel: %@", nameLabel);
return cell;
}
控制台日志输出:
cell.contentView subViews: ()
nameLabel: (null)
...(5 times)
想象一下: My screen when I launch IOs Simulator
你可以在这里看到原型单元格的UILabel没有改变(我已经检查过标签)而UIProgressView在屏幕之外
这是来自XCode 6的已知错误,还是只是我无法使用新IB?
我可以使用 contentView addSubview 手动添加所有功能,但显然我想使用StoryBoard。
编辑:该问题的解决方案( @codeIgnitor )
取代:
cell = [tableView dequeueReusableCellWithIdentifier:@"CellFileDown"];
使用:
cell = [tableView dequeueReusableCellWithIdentifier:@"CellFileDown" forIndexPath:indexPath];
答案 0 :(得分:1)
观察xcode 6新故事板功能W:any H:any
所以如果你想在xcode 5中打开它,你的xcode 5不会知道引入的新功能,所以有时你的整个视图都搞砸了。我经历过这个!所以总是采取这样的实验,但
下面的代码在Xcode beta 4中运行良好
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
UILabel *headLinesLabel = (UILabel *)[cell viewWithTag:101];
headLinesLabel.text = newsData.headlineTitle;
}