1

我正在做一个关于tableView和的练习tableViewCell。而且我在自定义视图单元格方面遇到了一些问题。

我已经创建了我自己的自定义tableViewCell文件,名为 .xib 文件newCellView.xib。我需要 .h 和 .m 文件,我选择超类作为 .h 和 .m 文件UITableViewCell

在我调用的视图控制器中,TableViewController我正在创建一个带有这样的默认单元格的表。

- (UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
 UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];

   cell.textLabel.text = [showNames objectAtIndex:[indexPath row]];
   cell.imageView.image = [UIImage imageNamed:[iconArray objectAtIndex:[indexPath row]]];

 return cell;
}

一旦我创建了自己的自定义视图。我导入newViewCell.h我的viewController并更新了这样的代码。

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

static NSString *newCellViewString = @"newCellView";

newCellView *cell = [tableView dequeueReusableCellWithIdentifier:newCellViewString];

 //newCellView *cell = [[newCellView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:newCellView];
if (cell == nil)
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"newCellView" owner:self options:nil];
    cell = (newCellView *)[nib objectAtIndex:0];
}

但是当我运行应用程序时,我看到一个空白页面,就像我没有相关视图一样。也许我忘了添加一些连接。我什至看不到要查看的空单元格。只有一个白色的空白页。任何帮助都会很棒。谢谢。

编辑其他文件

这是我的 .h 和 .m 文件。

#import <UIKit/UIKit.h>

@interface newCellView : UITableViewCell <UITableViewDelegate>

@property (nonatomic, strong) IBOutlet UILabel *nameLabel;
@property (nonatomic, strong) IBOutlet UIImageView *iconImageView;
@property (retain, nonatomic) IBOutlet UIButton *extendButton;

@end

.m 文件

#import "newCellView.h"

@implementation newCellView

@synthesize nameLabel;
@synthesize extendButton;
@synthesize iconImageView;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    // Initialization code
}
return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];

// Configure the view for the selected state
}

- (void)dealloc {
[extendButton release];
[nameLabel release];
[iconImageView release];
[super dealloc];
}
@end
4

4 回答 4

4

在处理自定义单元格时,我总是尝试将与单元格相关的所有内容封装在 UITableViewCell 子类中(包括 NIB / outlets / ..),并使用该tableView registerClass: forCellReuseIdentifier:方法告诉我的表格要为其单元格使用哪个类。

在您的示例中,您可以:

在你的 newCellView.m 中,在单元格初始化中添加 nib 加载:

-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    // Initialization code
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"newCellView" owner:self options:nil];
    self = [nib objectAtIndex:0];

}
return self;
}

确保所有插座连接正确。(即 Nib 中的 UITableViewCell 属于 NewCellView 类,..)

然后在控制器的 viewDidLoad 中,您告诉表使用 newCellView 作为其单元格:

[yourTableView registerClass:[newCellView class] forCellReuseIdentifier:@"newCellView"];

最后在 cellForRowAtIndexpath 中:

newCellView *cell = [tableView dequeueReusableCellWithIdentifier:@"newCellView"];

if (cell == nil)
{
    cell = [[NewCellView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"newCellView]";
}
于 2013-07-26T09:02:42.703 回答
2

我认为,您的问题的问题在于自定义单元格未附加到自定义类单元格。创建UITableViewCell类时,它不会随之创建 xib。然后您需要创建一个 xib 文件,该文件需要附加到自定义类文件。

创建一个没有内容的EMPTY NIB文件。然后通过对象添加一个uitablecustomcell,当您添加新对象时,转到 文件检查器并在文件名中输入名称 newCellView。现在自定义单元格将显示行。

现在,向自定义单元格添加几个视图,并通过在 .h 文件中创建的IBOutlets附加这些视图,即 nameLabel、iconImageView、extendButton。

于 2013-07-26T10:56:12.423 回答
0

这是我之前遇到的一个简单错误。你忘了打字。它应该是:

cell = (newCellView*)[nib objectAtIndex:0];

如果这不能解决您的问题,请确保您将 xib 文件设置为使用“newCellView”类而不是默认的“UITableViewCell”类。此外,如果您手动创建了一个 tableview 并将其添加为另一个视图的子视图或将其设置为您在 loadView 方法或类似方法中的视图,而不是子类化 UITableViewController ,请确保您为 tableview 设置框架并将其添加为子视图。

您可能希望从 newCellView.h 类中删除 。表视图的委托不应是视图或视图的子类。尤其是表格视图将呈现的单元格。UITableViewController 应该接收委托方法。

于 2013-07-26T07:35:17.760 回答
0

我找到了答案。除了单元格视图的定位之外,我的代码中的一切都运行良好。

项目使用自动布局作为默认属性。因此,每当我看到白页时,实际上单元格都超出了范围。我禁用了自动布局并从尺寸检查器设置项目的移动属性。

感谢您的努力。

于 2013-07-26T12:34:30.043 回答