【问题标题】:Xcode 4.2 UITableview Custom cellXcode 4.2 UITableview 自定义单元格
【发布时间】:2012-01-07 16:07:05
【问题描述】:

我对故事板上的自定义单元格有疑问。我需要从名为

的方法中访问标签

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

如何在我的代码中定义它?当我使用 IBOutlet 时,它可能会导致错误。

那么我怎样才能访问像

这样的标签

cell.textlable.text ??

非常感谢。

【问题讨论】:

  • 故事板 --> 视图控制器 ---> 添加表格视图 --> 选择单元格 --> 将标签和按钮添加到单元格然后我可以填充它。我需要访问我从代码中添加到自定义单元格的标签和按钮。你现在清楚了吗?

标签: iphone objective-c uitableview ios5


【解决方案1】:

只是对 Rob 答案的编辑。花了我一段时间,因为它在 xcode 4 中出现错误。将其更改为: UILabel *myLabel = (UILabel *)[cell.contentView viewWithTag:1];

【讨论】:

    【解决方案2】:

    对于故事板中的自定义单元格,使用 cellWillDisplay 方法而不是 cellForRow 来访问单元格变量。

    步骤 1. 创建自定义 MyTableViewCell:UITableViewCell 类。将 IBOutlet 变量放在此类中。

    步骤 2. 在 Xcode IB 上,选择单元格,将其类更改为 MyTableViewCell。然后链接 IBOutlets。

    第 3 步。在 cellWillDisplayAtIndexPath 中,照常访问 IBOutlet 变量 cell.myTextLabel。

    编辑:更正,如果您使用的是动态原型,那么 cellForRowAtIndexPath 将起作用。如果您使用的是静态单元格,则使用 cellWillDisplayAtIndexPath。如果您使用的是静态单元格,则上述步骤不适用,因为您将在 UITableView 的视图控制器中定义您的 IBOutlets。很抱歉造成混乱。

    【讨论】:

    • 他们的方法不再叫 cellWillDisplay 了吗?我是否有可能将连接拖放到单元格或表格视图或任何东西。?
    • 请在 Apple 文档中搜索确切的 cellWillDisplayAtIndexPath 方法签名。
    • 你错了@rob 可能是对的。现在有一个名为 cellwillDisplay 的方法?不管怎样,谢谢你的帮助
    【解决方案3】:

    我会继承 UITableViewCell。在子类中创建 IBOutlets,然后您可以以常规方式访问它们并在界面构建器中设置它们。只要确定并将您的原型单元设置为该类即可。然后出口就会出现,你可以按照你想要的方式使用点语法访问它们。

    一个例子是:

    @interface CustomCell : UITableViewCell
    {
    }
    @property (nonatomic, retain) IBOutlet UILabel* customLabel;
    
    @end
    

    实现也一样简单

    #import CustomCell.h
    @implementation CustomCell
    
    @synthesize customLabel;
    
    @end
    

    就这么简单, 然后在你的方法中你会做这样的事情:

    CustonmCell* cell = [tableView dequeueReusableCellWithIdentifier:@"customCell"];
    cell.customLabel = //whatever
    //or
    UILabel* mylabel = cell.customLabel;
    

    您可以根据需要添加任意数量的网点,并以类似的方式访问它们。

    【讨论】:

    • 我更喜欢这个答案。在我看来,通过网点访问比引用标签更明显。
    【解决方案4】:

    一种常见的解决方案是在情节提要中给每个标签一个标签,然后使用viewWithTag: 查找标签以在您的代码中找到它,如下所示:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        UITableViewCell *cell = blah blah blah ...
        ...
        UILabel *myLabel = [cell viewWithTag:1];
        UILabel *anotherLabel = [cell viewWithTag:2];
        // etc.
    }
    

    【讨论】:

    • 将标签放在单元格上后,我可以填充它。我需要从我的方法中调用该标签。您在此处使用的方式是使用您自己的代码对标签进行编码。是吗?
    • 我不明白你的问题。如果你问我是否在代码中创建了 UILabel,没有。我在 XIB 中创建它并在 XIB 中设置它的标签。
    猜你喜欢
    • 2020-10-16
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多