How should I addSubview to cell.contentView?

后端 未结 2 2033
故里飘歌
故里飘歌 2021-01-30 18:09

A (when the cell is newly created):

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


        
相关标签:
2条回答
  • 2021-01-30 18:19

    You should only add the sub views when you create the cell as in A, however assign the values to the labels etc every time as in B.

    This solution would fall out naturally if you create your own subclass of UITableViewCell that adds it's own sub views.

    Something like this.

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    {
        static NSString *CellIdentifier = @"Cell";
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    
            CGRect frame = CGRectMake(0, 0, 160, 50);
            UILabel *label = [[UILabel alloc] initWithFrame:frame];
            label.textAlignment = UITextAlignmentRight;
            [cell.contentView addSubview:label];
            [label release];
        }
    
        // Get a reference to the label here
    
        label.text = @"9:00am";
    
        return cell;
    }
    

    This way you get the performance benefits of only allocating the sub views once and you can just set the appropriate properties on the subview as needed.

    0 讨论(0)
  • 2021-01-30 18:31

    It's all about performance. With A, you reuse the cell with all of its subviews, with B, you reuse only the raw cell and add a new subview every iteration, which IMHO is not as good as A re: performance.

    I say either create a UITableView subclass or use solution A.

    0 讨论(0)
提交回复
热议问题