使用静态单元格对Tableview中的单元格进行子类化

时间:2014-07-22 12:48:19

标签: ios objective-c uitableview

我在App中有一个UITableViewController个静态单元格。有没有什么办法可以在表格视图中使用默认单元格以及代码中的子类单元格?我的tableview有8行,其中6行想要在tableview中使用默认单元格。对于剩下的两个单元格,我想通过代码创建它。

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

    MyCustomCell *cell = (MyCustomCell *)[tableView dequeueReusableCellWithIdentifier:@"MyCustomCell"];

    if (cell == nil) {
        cell = [[MyCustomCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:@"MyCustomCell"];
    }

    return cell;
}

在MyCustomCell.m中包含,

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
  self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
  if (self) {
    // Initialization code
    self.myLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 40)];
    self.myLabel.backgroundColor = [UIColor clearColor];
    self.myLabel.font = [UIFont boldSystemFontOfSize:[UIFont smallSystemFontSize]];
    self.myLabel.textAlignment = NSTextAlignmentCenter;
    self.myLabel.text = @"Hi there";
    [self.contentView addSubview:self.myLabel];
}
return self;
}

-tableView:CellForRowAtIndexPath:方法有助于按代码创建custom cells,但如果可能,我不知道如何在此处访问默认cells

2 个答案:

答案 0 :(得分:1)

您可以使用indexPath.row属性来查看您定位的行是否小于第6行,如果是这样的话,则会将不属于您的自定义单元格的单元格出列。< / p>

首先创建自定义单元格并为其指定标识符(&#34; myCustomCellReuseId)。然后在您的视图控制器中使用:

[tableview registerNib:[UINib nibWithName:@"CustomCell" bundle:nil] forCellReuseIdentifier:@"myCustomCellReuseId"];

然后,在Storyboard的原型单元格中,为默认单元格指定一个不同于您自定义单元格的标识符。

然后,在-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath使用:

if(indexPath.row > 5) {
   CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myCustomCellReuseId"];
} else {
  //
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

}

答案 1 :(得分:1)

正如@Sviatoslav Yakymiv所提到的,设计单元格的最简单方法是将Storyboard与程序化自定义混合:您将在Storyboard中完成布局,但您将在视图控制器.m文件中更改内容。这意味着您在-initWithStyle: reuseIdentifier:中拥有的所有代码都可以在IB中设计。然后你可以在IB中创建2个不同的动态原型。换句话说,您可以将自定义单元格与默认UITableViewCell混合使用。例如,在Interface Builder中,您有动态原型单元格:

  1. 默认UITableViewCell reuseIdentifier=@"Cell"

  2. 自定义单元格(您可以在右上方的Indentity Inspector中更改它)reuseIdentifier=@"MyCustomCell"

  3. 如果你能正确地做到这一点,你就不会需要使用这3行:

        if (cell == nil) {
            cell = [[MyCustomCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:@"MyCustomCell"];
        }
    

    然后你应该将你的功能改为:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if (indexPath.row >= rowWhereCustomCellShouldShow && indexPath.section > yourSection) {
            MyCustomCell *cell = (MyCustomCell *)[tableView dequeueReusableCellWithIdentifier:@"MyCustomCell"];
            [cell customizeForData:data[indexPath.row];
            return cell;
        } else { // The apple default cell
            UITableViewCell *cell2 = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
            // Here you can customize your cell.
            return cell2;
        }
    }