自定义单元格永远不会为零(不使用故事板)

时间:2014-02-10 11:34:40

标签: ios iphone objective-c uitableview

在片刻我有以下课程:

enter image description here

我的问题是我的自定义单元格类“GTNewsCustomCell”从未被调用过,我在.m文件中设置了一些断点,但没有发生任何事情,我意识到在我的“cellForRowAtIndexPath”中,单元格永远不会为零!

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

static NSString *CellIdentifier1 = @"NewsCell";


GTNewsCustomCell *newsCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1];

if(newsCell == nil){

newsCell = [[GTNewsCustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier1];

}

newsCell.titleLabel.text = [[self.newsList objectAtIndex:indexPath.section]objectForKey:@"title"];
NSAttributedString *attString = [[NSAttributedString alloc]initWithString:[[self.newsList objectAtIndex:indexPath.section]objectForKey:@"previewMessage"]];

newsCell.messageTextView.attributedText = attString;

return newsCell;

}

以下是我的GTNewsCustomCell.m中的代码的一小部分:

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

    self.messageTextView.textColor = [UIColor blackColor];
    self.messageTextView.backgroundColor = GTDefaultTextBackgroundColor;
    self.messageTextView.editable = NO;
    self.messageTextView.userInteractionEnabled = NO;

    self.messageTextView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    NSString *htmlTag = @"<b></b>";
    NSString *html = [NSString stringWithFormat:@"%@%@",htmlTag,self.messageTextView.attributedText];

    NSData *data = [html dataUsingEncoding:NSUTF8StringEncoding];

    CGFloat fontSizeMultiplier = 1.1;
    CGFloat const DTCoreTextDefaultFontSize = 12.0;
    NSString * fontName = @"Helvetica";
    DTCSSStylesheet* css;


    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")){

        css = [[DTCSSStylesheet alloc] initWithStyleBlock:@"ul li{padding-left: -10px;}"];


        NSMutableDictionary *options = [NSMutableDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:fontSizeMultiplier], NSTextSizeMultiplierDocumentOption,
                                        fontName, DTDefaultFontFamily,
                                        @"purple", DTDefaultLinkColor,
                                        @"red", DTDefaultLinkHighlightColor,
                                        css,DTDefaultStyleSheet,
                                        [NSNumber numberWithBool:YES],DTUseiOS6Attributes,
                                        nil];

.
.
.
.

以下是我的xib文件中的一些屏幕截图,以获取更多信息:

我的GTNewsTableViewController:

enter image description here

GTNewsCustomCell(FilesOwner): enter image description here

GTNewsCustomCell(查看):

enter image description here

GTNewsCustomCell:

enter image description here

2 个答案:

答案 0 :(得分:2)

好的,因为您正在通过tableView的方法registerNib:forCellReuseIdentifier:进行单元格注册。 initWithStyle:reuseIdentifier:永远不会被调用。如果您想要进行样式设置,请使用UITableViewCell子类的-awakeFromNib方法。

- (void)awakeFromNib {
  [super awakeFromNib];
  self.messageTextView.textColor = [UIColor blackColor];
  self.messageTextView.backgroundColor = GTDefaultTextBackgroundColor;
  self.messageTextView.editable = NO;
  self.messageTextView.userInteractionEnabled = NO;
}

答案 1 :(得分:2)

使用GTNewsCustomCell(FilesOwner),如果需要,您将无法重复使用此单元格。你应该把它变成NSObject(FileOwner)。并在cellForRowAtIndexPath中加载此单元格。

通过这种方式,您将获得与自定义单元格相同的样式。

static NSString *CellIdentifier= @"CustomCell";
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell ==  nil) {
    NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"CustomCell"
                                                      owner:self//transfer ownership to self
                                                    options:nil];
    cell = [nibViews objectAtIndex:0];
}

return cell;
}