0

在我的应用程序中,我希望有一个UIViewController将在其中保存一个UITableView。在这个 UITableView 中,我希望有一个自定义的 UITableViewCell(即我希望在这个 CELL 中定义我自己的元素 - 图像、标签和按钮 - 如下图所示)。而且...我想在情节提要中创建它们。

  • 现在,在 Storyboard 中设置元素很容易。
  • 我了解如何连接 UITableView 并将其设置在 UIViewController 中(包括 .h 文件中的委托并使用基本的表委托方法)。
  • 我不清楚的是如何连接和控制自定义的 UITableViewCell 及其插座。我可以在UIViewController .h 和 .m 文件中创建 Outlets 和 Actions 吗?我是否需要创建一个单独的UITableViewCell.h/.m文件并在 cellForRowAtIndexPath 方法中调用它们?

谁能建议什么是满足我需求的最佳方法?

在此处输入图像描述

更新:这是我在使用分离的MyCell.h/m文件选项时在cellForRowAtIndexPath中使用的代码。这段代码写在ViewController.m文件中,UITableView 就是在这个文件中实现的。

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

    MyCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

//MyCell is the Objective-C Class I created to manage the table cells attributes.

//@"ContentCell" is what I had entered in the Storyboard>>UITableViewCell as the Cell Identifier.

    if (cell == nil) {
        cell = [[MyCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
//Here is the place I'm not clear about - Am I supposed to init the cell in a different way? If so, how?    
    }

    cell.contentNameLabel.text = [self.dataArray objectAtIndex: [indexPath row]];

// this is the test I had done to check if the new "MyCell" object is actually getting what I would expect it to get. well... the text gets updated in the relevant label, so i guess it gets it 

    return cell;

}

运行应用程序时,使用调试器断点,我可以看到代码总是跳过“if (cell == nil)”,并且永远不会进入应该分配和启动新 MyCell 对象的代码。知道我做错了什么吗?

4

1 回答 1

2

正确,创建单独的 UITableViewCell.h/.m 文件以匹配您的自定义 UITableViewCell 类并在您的 cellForRowAtIndexPath 方法中调用它们。

在您的故事板中,将您的自定义 UITableViewCell 的类设置为您的自定义类(例如 CustomTableCell)。

您的自定义 UITableViewCell 类将包含您将在情节提要中连接的 IBOutlets,这是一个示例:

CustomTableCell.h:

#import "CustomStuff.h" // A custom data class, for this example

@interface CustomTableCell : UITableViewCell

@property (nonatomic, weak) IBOutlet UILabel *titleLabel;

- (void)configureForCustomStuff:(CustomStuff *)stuff;

@end

CustomTableCell.m:

#import "CustomTableCell.h"

@implementation CustomTableCell

@synthesize titleLabel;

#pragma mark - Configure the table view cell

- (void)configureForCustomStuff:(CustomStuff *)stuff
{
    // Set your outlets here, e.g.
    self.titleLabel.text = stuff.title;
}

@end

然后,在您的 cellForRowAtIndexPath 方法中,配置您的单元格:

CustomTableCell *cell = (CustomTableCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomCellID"];

// Your custom data here
CustomStuff *customStuff = <YOUR CUSTOM STUFF>

[cell configureForCustomStuff:customStuff];
于 2012-08-02T12:25:58.737 回答