2011-11-28 271 views
3

我在故事板上的自定义单元格有问题。我需要从所谓Xcode 4.2 UITableview自定义单元格

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

我怎么能在我的代码定义它的方法来访问标签?当我使用IBOutlet时,可能会导致错误。

所以,我怎么能访问诸如

cell.textlable.text标签?

enter image description here

非常感谢。

+0

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

回答

6

一个共同的解决办法是给每个标签的故事板标签,然后使用viewWithTag:找到它在你的代码中找到的标签,就像这样:

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

将标签放在我的细胞后,我可以填充它。我需要从我的方法中调用该标签。您在这里使用的方式是从您自己的代码中编码标签。是吗 ? –

+0

我不明白你的问题。如果您问是否在代码中创建了UILabel,则不会。我在XIB中创建了它,并在XIB中设置了它的标签。 –

1

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

第1步。创建一个自定义MyTableViewCell:UITableViewCell类。将IBOutlet变量放在这个类中。

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

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

编辑:更正,如果您使用动态原型,然后cellForRowAtIndexPath将工作。如果您使用的是静态单元格,请使用cellWillDisplayAtIndexPath。如果您使用的是静态单元格,则上述步骤不适用,因为您将在UITableView的视图控制器中定义您的IBOutlets。对困惑感到抱歉。

+0

他们是没有更多的方法称为cellWillDisplay? 我是否有可能将连接拖放到单元格或tableview或其他任何东西? –

+0

请为Apple文档搜索确切的cellWillDisplayAtIndexPath方法签名。 – jemeshsu

+0

你错了@rob可能关是对的。现在有一种叫做cellwillDisplay的方法吗? 反正谢谢你的帮助 –

13

我会继承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; 

您可以根据需要添加尽可能多的网点,并在si中访问它们类似的方式。

+0

我更喜欢这个答案。在我看来,访问网点比参考标记更为明显。 –

1

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