如何在不使用dequeueReusableCellWithIdentifier的情况下创建UITableview单元

时间:2016-11-12 13:41:36

标签: objective-c iphone xcode uitableview

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

    Cell *cell = (ChannelViewTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];


    NSString *channelName;
    channelName= [NSString stringWithFormat:@"Enter Channel %ld Name", (long)indexPath.row+1];
    indexPathRow= indexPath.row+1;
    return cell;

}

2 个答案:

答案 0 :(得分:1)

您可以使用

创建一个
[UITableViewCell alloc] initWithStyle:<#(UITableViewCellStyle)#> reuseIdentifier:<#(nullable NSString *)#>]

但正如@MuraliMohan和@Larme所说,我们通过避免创建不必要的单元来提高性能。

它的完成方式很简单,假设您有100个单元格要显示。由于设备屏幕太小,所以你最多只能一次向用户显示15个单元格,而不会出列,你将生成100个单元格并显示15.当单元格关闭时,什么是dequeing屏幕操作系统将将它重新用于显示的下一个单元格,而不是100,而内存中只有16个单元格。

基本上,只是保持dequeing但是如果你想尝试在测试应用程序中生成大量单元格而不进行dequeing以查看性能如何降低;)

答案 1 :(得分:0)

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

    TableViewCell *cell = (TableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"TableViewCell" forIndexPath:indexPath];

    cell.NumberLabel.text =[NSString stringWithFormat:@"Enter Channel %ld Name", (long)indexPath.row+1];
    cell.Name.tag = indexPath.row;

    NSString *dicKey = [NSString stringWithFormat:@"%ld", (long)indexPath.row];

    if (self.cellTextFiledValues[dicKey])
        cell.channelName.text = self.cellTextFiledValues[dicKey];
    else
        cell.channelName.text = @"";

    cell.selectionStyle =NO;
    return cell;
}

- (void)resetTableview{

    self.cellTextFiledValues = [NSMutableDictionary dictionary];
    [self.channelViewTableView reloadData];
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
    totalChannelCount =[self.datacount.text intValue];
    NSString *dicKey = [NSString stringWithFormat:@"%ld", (long)textField.tag];
    [self.cellTextFiledValues setObject:textField.text forKey:dicKey];
    [self.myTableview reloadData];


}