我有一个有点奇怪的
我在故事板中稍微实现了一下,但大部分都是在代码中完成的。我在故事板中所做的唯一一件事就是完成了
除了故事板之外,正如我所说的,一切都是在代码中完成的。我从 Core Data 获取单元格的信息,并通过将文章设置为单元格的
但正如我所说的,当应用程序加载时没有任何内容显示出来,所有单元格都会加载,并且我可以点击它们以查看其内容,但单元格本身是空白的。
相关代码如下:
单元格数据源:
在
这是我认为应该包含的所有相关信息。为什么所有单元格都显示为空白?
UITableView
结构。基本上,我有一个由 ArticleCell
对象(UITableViewCell
的子类)组成的表格,每个 ArticleCell
由一个“前”视图和一个“后”视图组成。前视图显示用户看到的所有标签等内容,而后视图则在左右两侧具有两个图标。这个双视图的想法是让用户可以将顶部视图向右或向左滑动以快速选择选项(有点像 Reeder 中的效果)。我在故事板中稍微实现了一下,但大部分都是在代码中完成的。我在故事板中所做的唯一一件事就是完成了
UITableViewController
的布局,并命名了原型单元格的标识符(标识符:“ArticleCell”)。除了故事板之外,正如我所说的,一切都是在代码中完成的。我从 Core Data 获取单元格的信息,并通过将文章设置为单元格的
article
属性来构建单元格,然后将该文章设置为 CellFront
UIView
的 article
属性。由于取决于单元格所持有的文章类型而存在两种单元格布局,在 CellFront
中它会检查它是哪种类型的单元格(一个名为 isUserAddedText
的属性)并相应地创建布局。但正如我所说的,当应用程序加载时没有任何内容显示出来,所有单元格都会加载,并且我可以点击它们以查看其内容,但单元格本身是空白的。
相关代码如下:
单元格数据源:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
ArticleInfo *articleInfo = [self.fetchedResultsController objectAtIndexPath:indexPath];
static NSString *CellIdentifier = @"ArticleCell";
ArticleCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[ArticleCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.article = articleInfo;
return cell;
}
在
ArticleCell.m
文件中,我重写了 article 的 set 方法,这样当上面的数据源方法调用它时,它可以同时设置视图的 article
属性。- (void)setArticle:(ArticleInfo *)article {
_article = article;
self.cellFront.article = article;
}
我还在ArticleCell.m
文件中创建了CellFront
和CellBack
的UIView
:
- (void)awakeFromNib {
[super awakeFromNib];
self.cellBack = [[CellBack alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, 80)];
[self.contentView addSubview:self.cellBack];
self.cellFront = [[CellFront alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, 80)];
[self.contentView addSubview:self.cellFront];
}
CellFront.m
在其initWithFrame:
方法中调用以下方法,根据文章类型设置标签并将它们添加到子视图中。
- (void)addControlsToView {
if ([self.article.isUserAddedText isEqualToNumber:@YES]) {
UILabel *preview = [[UILabel alloc] initWithFrame:CGRectMake(20, 5, 280, 70)];
preview.text = self.article.preview;
preview.numberOfLines = 4;
preview.font = [UIFont systemFontOfSize:16.0f];
preview.textColor = [UIColor blackColor];
preview.backgroundColor = [UIColor clearColor];
[self addSubview:preview];
}
else {
UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(20, 10, 280, 20)];
title.text = self.article.title;
title.font = [UIFont boldSystemFontOfSize:18.0f];
title.textColor = [UIColor blackColor];
title.backgroundColor = [UIColor clearColor];
[self addSubview:title];
UILabel *URL = [[UILabel alloc] initWithFrame:CGRectMake(20, 35, 280, 20)];
URL.text = self.article.url;
URL.font = [UIFont systemFontOfSize:16.0f];
URL.textColor = [UIColor blackColor];
URL.backgroundColor = [UIColor clearColor];
[self addSubview:URL];
UILabel *preview = [[UILabel alloc] initWithFrame:CGRectMake(20, 60, 280, 40)];
preview.text = self.article.preview;
preview.numberOfLines = 2;
preview.font = [UIFont systemFontOfSize:16.0f];
preview.textColor = [UIColor grayColor];
preview.backgroundColor = [UIColor clearColor];
[self addSubview:preview];
}
}
这是我认为应该包含的所有相关信息。为什么所有单元格都显示为空白?