【问题标题】:Custom Table Cell Loading Data Objective C iOS -自定义表格单元格加载数据目标 C iOS -
【发布时间】:2012-04-05 23:53:21
【问题描述】:

目前我有以下方法,但不太奏效...

 - (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *MyIdentifier = @"cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"TVCell" owner:self options:nil];
        cell = tvCell;
        self.tvCell = nil;
    }

    UILabel *label;
    label = (UILabel *)[cell viewWithTag:5];
    label.text = [NSString stringWithFormat:@"Hole #%d", indexPath.row];

    return cell;
}

表格视图创建时没有错误,但每个单独的单元格都不包含任何内容,但显然 TVCell.xib 有一个标签,标签为 5。我唯一的问题是这个。我不太明白苹果在这里给出的这些步骤......

  1. 在 nib 文档窗口中选择 File's Owner,打开 Inspector 的 Identity 窗格,并将 File's Owner 的类设置为您的自定义视图控制器类。

  2. 将 File’s Owner 的单元出口(现在是您的自定义子类的占位符实例)连接到 nib 文件文档中的 table-view 单元对象。

这就是这些步骤的所在... http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7

有人可以为像我这样的菜鸟解释一下这些步骤吗?我认为这是我搞砸的,但我本可以做错任何事。

【问题讨论】:

  • 也许会检查您返回的行数和节数是否为非零?

标签: iphone objective-c ios cocoa-touch uitableview


【解决方案1】:

我不认为 TcCell 成为 self 的属性。请在单元队列为空时尝试此操作:

if (cell == nil) {
    cell=[[NSBundle mainBundle] loadNibNamed:@"TVCell" owner:self options:nil];
}

【讨论】:

  • 你是对的,我刚刚检查过了。 @jonkroll 似乎有一个更正确的版本。此外,您可以在调用 mainBundle 后编写 cell=self.myViewFromNib:这里的另一个线程建议这样做 [stackoverflow.com/questions/863321/…
【解决方案2】:

你说你不明白的步骤很难用语言解释。我建议寻找有图像或视频的教程。 (我进行了快速搜索,有很多可用的,但我真的不想在没有仔细阅读的情况下选择一个来指导您)。

但是,我更喜欢以这种方式创建自定义表格视图单元格: http://www.mobilesce.com/2011/12/27/the-best-way-to-do-custom-reusable-uitableviewcells/

它与苹果文档中描述的方式略有不同,但我看到很多人使用它,我发现它更容易。

【讨论】:

  • 那个例子不太适合我...他从哪里得到这个... MenuItem *menuItem = [menuItems_ objectAtIndex:[indexPath row]]; --- 什么是“MenuItem”变量类型?
  • MenuItem 只是一个通用对象,用于填充该特定示例中的单元格。您可以将其删除,然后将您想要的任何值分配给单元格属性。
  • 谢谢,我得到了它的工作,但表本身现在搞砸了。表格起初看起来是空的,但如果你开始滚动我的表格单元格,就会从各个地方进入。
  • 嗯...也许您可以发布更新后的 tableView:cellForRowAtIndexPath: 方法?当你说当你开始滚动你的单元格时,你的意思是什么?他们都立即填写,还是只是滚动到屏幕上的新单元格被填写?另外,你的 dataSoure tableView:numberOfRowsInSection: 方法中有什么?
【解决方案3】:

NSBundle 方法loadNibNamed:owner:options: 返回一个 NSArray,其中包含您的 nib 文件中的顶级对象。试试这个:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
    NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"TVCell" owner:self options:nil];
    cell = [nibArray objectAtIndex:0];
}

【讨论】:

  • 您是否检查过您的 tableView:cellForRowAtIndexPath: 方法实际上被调用了?您是否已将视图控制器设为表格视图的数据源?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多