使用 StoryBoard 制作一个能够删除cell的TableView

本篇博客方便自己检索使用。资源链接

下面是制作效果图,点击删除按钮,就能将该cell删除:

 

下面是主要的代码:

#define KSUPER_TAG 20000
#define KDEFAU_TAG 10000

#import "WholeViewController.h"
#import "HJ_CELL_3.h"
#import "HJ_CELL_4.h"
#import "NULL_CELL.h"
#import "HRAdView.h"
#import "FrameMacro.h"
#import "ColorMacro.h"
#import "FontMacro.h"

@interface WholeViewController ()
{
    NSMutableArray *_dataSource;
    UIView         * _tabHead_View ;
    
}
@end

@implementation WholeViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self setTitle:@"全部"];
  
    self.tableView.backgroundColor = K_SET_COLOR_VALUE(K_ROOT_BGC);
    
    // 假设有表头数据
    [self createTableHeader];
    
    // 设置无选择线
    [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    
    self.tableView.showsHorizontalScrollIndicator = NO;
    self.tableView.showsVerticalScrollIndicator = NO;
    
    // 初始化数据源
    _dataSource = [NSMutableArray arrayWithObjects:@"3",@"3",@"2",@"3",@"2",@"3",@"2",@"3",@"2",@"3",@"2",@"3",@"2",@"3",@"2",@"3",@"2",@"0", nil];

}

// 创建表头
- (void)createTableHeader{
    
    if (!_tabHead_View) {
        
        // 表头部分的View
        _tabHead_View = [[UIView alloc] initWithFrame:CGRectMake(50,50, K_WIDTH, 62)];
        
        _tabHead_View.backgroundColor = K_SET_COLOR_VALUE(K_ROOT_BGC);
        
        // 初始化广告控件
        HRAdView *hdview = [[HRAdView alloc] initWithTitles:@[@"你有一笔支付订单30分钟后关闭",@"你有一笔支付订单60分钟后关闭",@"你有一笔支付订单90分钟后关闭"]];
        hdview.time = 2;
        [hdview beginScroll];
        hdview.backgroundColor = [UIColor whiteColor];
        hdview.isHaveTouchEvent = YES;
        hdview.clickAdBlock = ^(NSUInteger index){
            
            NSLog(@"下标是 %ld",(unsigned long)index);
        };
        hdview.frame = CGRectMake(0, 12, K_WIDTH, 49);
        [_tabHead_View addSubview:hdview];
        
        // 分割线 1
        UIView *line_1 = [[UIView alloc] initWithFrame:CGRectMake(0, 11, K_WIDTH, 1)];
        [line_1 setBackgroundColor:K_SET_COLOR_VALUE(@"#dbdbdb")];
        [_tabHead_View addSubview:line_1];
        
        // 分割线 2
        UIView *line_2 = [[UIView alloc] initWithFrame:CGRectMake(0, 61, K_WIDTH, 1)];
        [line_2 setBackgroundColor:K_SET_COLOR_VALUE(@"#dbdbdb")];
        [_tabHead_View addSubview:line_2];
        
    }
    
    self.tableView.tableHeaderView = _tabHead_View;
    
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    if (self.isViewLoaded&&self.view.window) {
        self.view = nil;
    }
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return [_dataSource count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    UITableViewCell *cell = nil;
    
    NSString *mask = _dataSource[indexPath.row];
    
    
    if ([mask isEqualToString:@"3"]) {
        
        cell = (HJ_CELL_3*)[tableView dequeueReusableCellWithIdentifier:@"HJ_CELL_3" forIndexPath:indexPath];
        
        if (nil == cell) {
            
            cell = (HJ_CELL_3*)[[[NSBundle mainBundle] loadNibNamed:@"HJ_CELL_3" owner:self options:nil] lastObject];
        }
        
        ((HJ_CELL_3*)cell).block = ^(NSInteger statusNum){
        
            if ( 1 == statusNum) {
                
                // 执行删除任务
                [self tableView:tableView commitEditingStyle:UITableViewCellEditingStyleDelete forRowAtIndexPath:indexPath];
            }
        };
    }else
    
    if ([mask isEqualToString:@"2"]) {
        
        cell = (HJ_CELL_4*)[tableView dequeueReusableCellWithIdentifier:@"HJ_CELL_4" forIndexPath:indexPath];
        
        if (nil == cell) {
            
            cell = (HJ_CELL_4*)[[[NSBundle mainBundle] loadNibNamed:@"HJ_CELL_4" owner:self options:nil] lastObject];
        }
        
        ((HJ_CELL_4*)cell).block = ^(NSInteger statusNum){
            
            if ( 1 == statusNum) {
                
                // 执行删除任务
                [self tableView:tableView commitEditingStyle:UITableViewCellEditingStyleDelete forRowAtIndexPath:indexPath];
            }
        };

    }else {
        
        cell = (NULL_CELL*)[tableView dequeueReusableCellWithIdentifier:@"NULL_CELL" forIndexPath:indexPath];
        
        if (nil == cell) {
            
            cell = (NULL_CELL*)[[[NSBundle mainBundle] loadNibNamed:@"NULL_CELL" owner:self options:nil] lastObject];
        }
    }
    

    return cell;
}


-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    
    NSString *mask = _dataSource[indexPath.row];
    
    if ([mask isEqualToString:@"3"]) {
        
        return 105;
    }else
    
    if ([mask isEqualToString:@"2"]) {
        
        return 80;
    }else {
        
        return 20;
    }
    
    return 105;
    
}

// 删除某些行的方法
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        
        [_dataSource removeObjectAtIndex:indexPath.row];

        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    
        [self.tableView reloadData];
        
    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}


/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
}
*/

/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the item to be re-orderable.
    return YES;
}
*/

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end
原文地址:https://www.cnblogs.com/benpaobadaniu/p/5134392.html