UITableView的空原型单元格

时间:2014-04-05 15:02:10

标签: ios objective-c uitableview storyboard

我有一个新项目,我必须原型单元格拖动到现有的表视图中。然后我

  • 使用适当的标签为原型单元添加了一些标签
  • 设置单元格的标识符

然后在我获得委托回调的tableview委托中:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"myCustomCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// Configure the cell...
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
UILabel *nameLabel = (UILabel *)[cell viewWithTag:11];

我看到名字标签是零。我有双重检查和三倍检查标签和可重复使用的标识符,没有运气。在故事板中,我看到tableview将pro类型单元格作为其单元格,contentView显示我的标签。我错过了什么?

2 个答案:

答案 0 :(得分:0)

您是否曾在if (cell == nil)分支中创建新单元格?如果是,您将在那里创建常规UITAbleViewCell。不要指望那里有任何自定义标签,因为你不从任何nib文件或故事板加载它。

细胞对象是什么类型的? NSLog或者在调试器中查看实际创建的类型。

答案 1 :(得分:0)

您正在分配不包含自定义标签的UITableViewCell。如果您使用Storyboard创建了View,那么您应该使用以下方法分配该视图。

您可以创建一个Utility方法来从NibName

获取Class实例
+ (id)loadNibNamed:(NSString *)nibName ofClass:(Class)objClass 
{
    if (nibName && objClass) 
    {
        NSArray *objects = [[NSBundle mainBundle] loadNibNamed:nibName 
                                                     owner:nil 
                                                   options:nil];            
        for (id currentObject in objects )
        {
            if ([currentObject isKindOfClass:objClass])
                return currentObject;
        }
    }
    return nil;
}

在您的代码中使用此功能,例如

CustomViewCell *cell = (CustomViewCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomViewCell"];
if (cell == nil)
{
    cell = [Utility loadNibNamed:@"CustomViewCell" ofClass:[CustomViewCell class]];
}

cell.yourLabel.text = @"Dummy Text";

希望这会对你有帮助。