Ios 分配和初始化UITableViewCell的子类涉及哪些问题

Ios 分配和初始化UITableViewCell的子类涉及哪些问题,ios,objective-c,uitableview,Ios,Objective C,Uitableview,这是苹果公司的代码片段 MyTableViewCell*cell=[tableView dequeueReusableCellWithIdentifier:@“MyIdentifier”]工作正常,无需检查nil,因为单元在story board中定义,并且始终返回有效单元 但如果我不使用故事板,我将如何以编程方式在我的tableview中使用多个自定义单元格?分配和初始化MyTableViewCell有哪些问题?还有另一种方法可以使用: - (UITableViewCell *)tableVi

这是苹果公司的代码片段

MyTableViewCell*cell=[tableView dequeueReusableCellWithIdentifier:@“MyIdentifier”]
工作正常,无需检查nil,因为单元在story board中定义,并且始终返回有效单元


但如果我不使用故事板,我将如何以编程方式在我的tableview中使用多个自定义单元格?分配和初始化MyTableViewCell有哪些问题?还有另一种方法可以使用:

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

    cell.firstLabel.text = [NSString stringWithFormat:@"%d", indexPath.row];
    cell.secondLabel.text = [NSString stringWithFormat:@"%d", NUMBER_OF_ROWS - indexPath.row];

    return cell;
}
您可以传递额外的参数-indexPath。
然后检查单元格是否为nil,如果是,则分配并初始化它。

如果不使用故事板,则需要对照nil检查单元格,如果是,则分配一个新单元格

MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"> forIndexPath:indexPath];

您也可以通过这种方式使用自己的自定义单元格

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = @"MyIdentifier";
    MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

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

    cell.firstLabel.text = [NSString stringWithFormat:@"%d", indexPath.row];
    cell.secondLabel.text = [NSString stringWithFormat:@"%d", NUMBER_OF_ROWS - indexPath.row];

    return cell;
}

希望它对您有所帮助。

如果您希望以编程方式创建单元格,那么您需要像这样分配和初始化表单元格

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

    MyTableViewCell *cell=(MyTableViewCell *)[self.yourtableview  dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:0];//change as per your need

   if(cell==nil)
    {
    [[NSBundle mainBundle] loadNibNamed:@"MyTableViewCell" owner:self options:nil];
    cell=self.mytableviewcellref;
    }
    cell.textLabel.text=@"sometext";
    return cell;
}

你应该使用方法

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

{
static NSString *identifier = @"cell";

    UITableViewCell *cell = [listtableview dequeueReusableHeaderFooterViewWithIdentifier:identifier];

    if (cell ==nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

    }
}
当然可以。您可以阅读文档

当您调用方法时

- (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier
- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier
,它检查重用队列中是否有可用的单元格。如果没有,它将检查是否可以自动创建此单元格。如果您以前为这个重用标识符注册过单元类或nib,它将使用类或nib创建新单元并返回它。如果您没有注册任何内容,它将返回零


最好使用注册,因为如果对于不同的重用标识符有不同的自定义单元格,那么创建这些单元格的代码就会变得混乱。这也是正确的方法。iOS5和iOS6中分别添加了注册方法。程序员创建自定义单元格的代码与旧版本的iOS相关。

我看不到MyTableViewCell的分配和初始化。它将如何工作?您检查它是否为零,然后分配并初始化它。我使用的是自定义单元格MyTableViewCell,而不仅仅是常规单元格。确定没有问题:)在这种情况下,您必须创建自定义单元格的saprate类。请检查此链接,您可以找到如何添加自定义单元格我希望以编程方式执行所有操作,没有笔尖或故事板。好吧,这样你们就可以在自定义单元类中以编程方式添加单元元素(标签、图像)。检查此项以了解更多详细信息,同时检查:D@SJ。您需要在使用自定义单元格时加载Nib。请告诉我您为什么不分配uitableviewcell的init子类,以及此loadNibNamed如何工作?您正在将自定义单元格直接在其cell.xib连接到视图控制器。所以你可以把它的笔尖放在这里。如果您使用的是默认的UITableViewCell,那么如果它为nil,您必须允许使用它。@SJ。.我有UITableViewCell的子类,它也有nib,我想创建5个不同类型的单元格,我应该创建5个不同的UITableViewCell子类吗?您需要创建5个不同的XIB到自定义单元格,并使用[[NSBundle mainBundle]加载它们loadNibNamed:@“MyTableViewCell”所有者:自选项:nil]///根据xib名称更改MYTableViewCell。对于每个indexpathplease,您可以详细地告诉我这些方法是如何工作的,为什么不允许uitableviewcell的alloc init子类,以及您是如何找到这些方法的:p
- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier