自定义表格视图单元格中没有可见视图

时间:2013-07-26 07:24:53

标签: iphone ios objective-c uitableview xib

我正在练习tableViewtableViewCell。我在自定义视图单元格方面遇到了一些问题。

我已经使用名为tableViewCell的.xib文件创建了我自己的自定义newCellView.xib。我需要.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 个答案:

答案 0 :(得分:4)

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

在您的示例中,您可以:

在newCellView.m中,在单元格init中添加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;
}

确保所有Outlets连接正确无误。 (即你的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]";
}

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分:0)

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

Project使用autolayout作为默认属性。因此,每当我看到白页实际上细胞都超出界限时。我禁用了autolayout并从尺寸检查器中设置了项目的移动属性。

感谢您的努力。