我正在练习tableView
和tableViewCell
。我在自定义视图单元格方面遇到了一些问题。
我已经使用名为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
答案 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并从尺寸检查器中设置了项目的移动属性。
感谢您的努力。