0

我正在测试一个定制的 UITableViewCell,其中的部分是在 initWithStyle 中定制的,并且控件是在代码中创建的。我正在测试看看我们是否可以在 UITableView 中将此单元格与情节提要和原型单元格一起使用,并使用情节提要提供的交互。我正在使用的单元称为 EvenCell。

如果我删除原型单元并在代码中实例化单元,如下所示:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    EvenCell *cell=[tableView dequeueReusableCellWithIdentifier:@"MyCell"];

    if(cell==nil)
        cell=[[EvenCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyCell"];

    cell.cellTitleLabel.text=[allKeys objectAtIndex:indexPath.row];
    return cell;
}

有用。

在此处输入图像描述

但是当我设置一个原型单元并将其类设置为 EvenCell 并将标识符重用为“MyCell”时,它不起作用。我做错了什么或者我正在尝试做的事情可能吗?

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

0

如果我没看错,您在第二个示例中有空单元格。您需要在界面构建器中将子视图添加到您的单元格内容,并将其作为出口连接到您的 EvenCell 类。例如:在界面生成器中将标签添加到您的自定义单元格,而不是在 EvenCell 类中为该标签创建一个出口,您可以将出口命名为 ex。titleLabel 和比在你的 tableview:cellForRowAtIndexPath 设置你的标签文本属性 cell.titleLabel.text = [allKeys objectAtIndex:indexPath.row]

我刚刚发现我错过了在 initWithStyle 方法中向单元格内容添加新视图的部分内容。所以我刚刚在 xCode 中创建了示例代码,即使在 EvenCell initWithStyle 方法中以编程方式添加单元格子视图,它也对我有用。这是示例:

#import <UIKit/UIKit.h>
@interface EvenCell : UITableViewCell
@property (nonatomic, strong) UILabel *textLabel;
@end

#import "EvenCell.h"

@implementation EvenCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {

    self.textLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 50, 20)];
    [self.contentView addSubview:self.textLabel];

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

// Configure the view for the selected state
}

@end

比在你的 tableView:cellForRowAtIndexPath: 方法中

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

EvenCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId forIndexPath:indexPath];

if(cell == nil) {
    cell = [[testCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
}

cell.textLabel.text = @"Example title";

return cell;
}

在界面构建器中为 UITableView 设置动态原型单元格,将单元格类设置为 EvenCell 并将单元格标识符设置为 MyCell 并且它必须工作。我刚刚检查过了。

于 2013-08-03T17:57:31.053 回答