How to add a custom separator to UITableViewCell?

后端 未结 4 1169
北海茫月
北海茫月 2020-12-16 17:22

Please spare sometime as this is a long explanation

I have a UIViewController which consists of a UIButton and a UITableView w

4条回答
  •  南方客
    南方客 (楼主)
    2020-12-16 17:35

    Right way to do this would be to have the separator with in the cell class, subclass UITableViewCell if you haven't add a separator image variable there and on each cell creation you can just change the image and the frame rather than adding that on each redraw. If you require a code for this i can supply that as well. Currently when the cell is redrawn it already has the image u added last time and you just adding that again, either you remove that in -prepareForReuse method or just do as i explained above.

    ***** Custom Cell *****
    //
    //  CustomCell.m
    //  Custom
    //
    //  Created by Syed Arsalan Pervez on 2/8/13.
    //  Copyright (c) 2013 SAPLogix. All rights reserved.
    //
    
    #import "CustomCell.h"
    
    @implementation CustomCell
    
    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
    {
        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
        if (self) {
            // Initialization code
            _separatorImage = [[UIImageView alloc] initWithFrame:CGRectZero];
            [[self contentView] addSubview:_separatorImage];
        }
        return self;
    }
    
    - (void)prepareForReuse
    {
        _separatorImage.image = nil;
    }
    
    - (void)dealloc
    {
        [_separatorImage release];
        [super dealloc];
    }
    
    @end
    

    Using the above cell in the view controller.

    ***** Test View Controller *****
    //
    //  TestViewController.m
    //  Custom
    //
    //  Created by Syed Arsalan Pervez on 2/8/13.
    //  Copyright (c) 2013 SAPLogix. All rights reserved.
    //
    
    #import "TestViewController.h"
    #import "CustomCell.h"
    
    @interface TestViewController ()
    
    @end
    
    @implementation TestViewController
    
    - (void)viewDidLoad
    {
        [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    
    #warning TODO: set the image name here
        _separatorImage1 = [[UIImage imageNamed:@""] retain];
        _separatorImage2 = [[UIImage imageNamed:@""] retain];
    }
    
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return 1;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return 2;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *_identifier = @"CustomCell";
        CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:_identifier];
        if (!cell)
        {
            cell = [[[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:_identifier] autorelease];
        }
    
        //Set Separator Image Here
        //Preload the image so it doesn't effect the scrolling performance
        CGRect frame = cell.contentView.frame;
        switch (indexPath.row)
        {
            case 0:
                cell.separatorImage.image = _separatorImage1;
                cell.separatorImage.frame = CGRectMake(0, CGRectGetMaxY(frame)-1, frame.size.width, 1);
                break;
            case 1:
                cell.separatorImage.image = _separatorImage2;
                cell.separatorImage.frame = CGRectMake(frame.origin.x+5, CGRectGetMaxY(frame)-1, frame.size.width-10, 1);
                break;
        }
    
        return cell;
    }
    
    - (void)dealloc
    {
        [_separatorImage1 release];
        [_separatorImage2 release];
    
        [super dealloc];
    }
    
    @end
    

提交回复
热议问题