自定义UITableViewCellStyle

时间:2011-11-19 13:44:03

标签: ios xcode uitableview

我想让自定义的uitableviewcellstyle在我的应用中发表评论。我想要uitableviewcell与评论文本,喜欢的数量,作者的姓名,日期等... 你有什么想法吗? 我已经创建了方法,但我不知道如何实现它。 我的代码:

- (UITableViewCell *)getCommentTableCellWithTableView:(UITableView *)tableView commentText:(NSString *)commentText numberOfRows:(NSInteger)numberOfRows numberOfLikes:(NSString *)numberOfLikes date:(NSString *)date writer:(NSString *) writerName {
    static NSString *CellIdentifier = @"TitleCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];



    return cell;
}

2 个答案:

答案 0 :(得分:3)

对不起,我找不到一个有明确步骤的教程,但你可以在这个网站上搜索一些相关的帖子或问题。
希望下面的简单代码可以帮到你。

这是一个文档也可以帮助,花点时间看看;)
http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/TableView_iPhone/TableViewCells/TableViewCells.html


新类继承自UITableViewCell,CustomCell.h:
(提示:File - > New File - > Objective-C class - >设置类名称&选择子类UITableViewCell

@interface MapsListViewCell : UITableViewCell
{
    // Add iVars that you want.
}
// Some custom methods

CustomCell.m:

// ...
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}
// ...
// Some custom methods
- (void)setAuthorName:(NSString *)name
{
    // ...
}

TableViewController.m:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[CategoriesListViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    CategoriesListViewCell * customCell = (CategoriesListViewCell *)cell;
    // Set your data:
    [customCell setAuthorName:@"God"];
    // ...etc.

    return cell;
}

答案 1 :(得分:0)

对于我们这些使用较新的(iOS 6及更高版本)UITableView API来排队的单元格dequeueReusableCellWithIdentifier:forIndexPath,这实际上保证返回实例化的单元格,因此我们无法执行nil检查和手动呼叫initWithStyle。因此,最好的解决方案是子类UITableViewCell并在初始化时手动强制执行该样式。

作为一个例子,如果我们想要一个UITableViewCellStyleSubtitle样式的单元格,我们将创建一个自定义子类:

@interface ABCSubtitledTableViewCell : UITableViewCell

@end

@implementation ABCSubtitledTableViewCell

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    return [super initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifier];
}

@end

然后在我们的viewDidLoad中,我们会注册相应的班级

[tableView registerClass:[ABCSubtitledTableViewCell class] forCellReuseIdentifier:NSStringFromClass([ABCSubtitledTableViewCell class])];

制作我们的出列方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ABCSubtitledTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([ABCSubtitledTableViewCell class]) forIndexPath:indexPath];
    cell.textLabel.numberOfLines = 0;
    cell.textLabel.text = @"Hello";
    cell.detailTextLabel.text = @"World";
    return cell;
}