• TableView动态的删除,添加cell


    刚有人问我,tableview的数据源更新的时候能否动画更新cell,reload刷新会有闪屏现象..答案是肯定的.

    所以中午花了几分钟写了一个demo,无法上传工程.贴出代码...其实很简单...关键的就是下面两个方法的实现

     16 - (void)addOneCell:(id)sender;
     17 - (void)removeOneCell:(id)sender;
      9 #import "ViewController.h"
     10 #define NAVIGATION_HEIGHT 44
     11 
     12 @interface ViewController (private)
     13 - (void)initTableView;
     14 - (void)initDataArray;
     15 - (void)initNavigationBarButton;
     16 - (void)addOneCell:(id)sender;
     17 - (void)removeOneCell:(id)sender;
     18 @end
     19 
     20 @implementation ViewController
     21 @synthesize myTableView,myDataArr;
     22 
     23 - (void)viewDidLoad
     24 {
     25     [super viewDidLoad];
     26     // Do any additional setup after loading the view, typically from a nib.
     27     [self initNavigationBarButton];
     28     [self initDataArray];
     29     [self initTableView];
     30 }
     31 
     32 - (void)viewDidUnload
     33 {
     34     [super viewDidUnload];
     35     // Release any retained subviews of the main view.
     36 }
     37 
     38 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
     39 {
     40     return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
     41 }
     42 
     43 #pragma mark - Initialize Method
     44 - (void)initTableView
     45 {
     46     UITableView *_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - NAVIGATION_HEIGHT) style:UITableViewStylePlain];
     47     _tableView.delegate = self;
     48     _tableView.dataSource = self;
     49     UIView *footerView = [[UIView alloc] init];
     50     [_tableView setTableFooterView:footerView];
     51     [footerView release];
     52     self.myTableView = _tableView;
     53     [_tableView release];
     54     
     55     [self.view addSubview:self.myTableView];
     56 }
     57 
     58 - (void)initDataArray
     59 {
     60     NSMutableArray *_tempArr = [NSMutableArray arrayWithCapacity:0];
     61     for (int a = 0; a < 10; a++) {
     62         NSString *str = [NSString stringWithFormat:@"num:%d",a];
     63         [_tempArr addObject:str];
     64     }
     65     self.myDataArr = _tempArr;
     66 }
     67 
     68 - (void)initNavigationBarButton
     69 {
     70     UIBarButtonItem *_addBarButton = [[UIBarButtonItem alloc] initWithTitle:@"add" style:UIBarButtonItemStylePlain target:self action:@selector(addOneCell:)];
     71     self.navigationItem.leftBarButtonItem = _addBarButton;
     72     [_addBarButton release];
     73     
     74     UIBarButtonItem *_removeBarButton = [[UIBarButtonItem alloc] initWithTitle:@"remove" style:UIBarButtonItemStylePlain target:self action:@selector(removeOneCell:)];
     75     self.navigationItem.rightBarButtonItem = _removeBarButton;
     76     [_removeBarButton release];
     77 }
     78 
     79 #pragma mark - TableView Delegate
     80 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
     81 {
     82     return [self.myDataArr count];
     83 }
     84 
     85 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
     86 {
     87     static NSString *reuseID = @"Animation insert";
     88     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseID];
     89     if (cell == nil) {
     90         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseID];
     91     }
     92     cell.textLabel.text = [self.myDataArr objectAtIndex:indexPath.row];
     93     return cell;
     94 }
     95 
     96 #pragma mark - ButtonClick Method
     97 - (void)addOneCell:(id)sender
     98 {
     99     [self.myTableView beginUpdates];
    100     [self.myDataArr insertObject:@"new" atIndex:0];
    101     NSArray *_tempIndexPathArr = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]];
    102     [self.myTableView insertRowsAtIndexPaths:_tempIndexPathArr withRowAnimation:UITableViewRowAnimationNone];
    103     [self.myTableView endUpdates];
    104 }
    105 
    106 - (void)removeOneCell:(id)sender
    107 {
    108     [self.myTableView beginUpdates];
    109     [self.myDataArr removeObjectAtIndex:0];
    110     NSArray *_tempIndexPathArr = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]];
    111     [self.myTableView deleteRowsAtIndexPaths:_tempIndexPathArr withRowAnimation:UITableViewRowAnimationFade];
    112     [self.myTableView endUpdates];
    113 }
    114 
    115 #pragma mark - Dealloc
    116 - (void)dealloc
    117 {
    118     self.myTableView = nil;
    119     self.myDataArr = nil;
    120     [super dealloc];
    121 }
    122 
    123 @end
  • 相关阅读:
    Git 学习小问题记录
    Spring缓存源码剖析:(一)工具选择
    最佳线程数
    Python 装饰器备忘
    使用SCSS扩展Bootstrap4
    Flask 路由相关操作
    Flask开发环境搭建
    Python数据分析开发环境
    Python中的矩阵操作
    Windows 安装 MySQL 8.0.11
  • 原文地址:https://www.cnblogs.com/yingkong1987/p/2604847.html
Copyright © 2020-2023  润新知