UITableView控件的一些使用技巧

前言

UI界面信息的更新,归根结底是对数据的操作。因此,最正确的姿势应该是:先修改数据源-->后刷新界面;并不是针对某个界面上的控件进行直接赋值或直接修改,这样的操作大部分会造成界面显示混乱的情况。

Tip1:刷新�操作

// 这个是在项目中UITableView使用最多的的刷新方式了吧
- (void)reloadData;
// 刷新每个分段(或着叫分区/分组)的标题信息
- (void)reloadSectionIndexTitles;
// 刷新一组数据(一个分区/一个分段)
- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);
// 刷新一行数据
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);

说明:

  1. 对于UITableView的数据刷新Apple提供了这4个接口。针对添加、删除、插入和排序等,在对界面进行相应操作后,这些操作针对操作过的行或组也进行了相应地刷新。因为不属于单纯的刷新,不列入在内。
  2. 对于UITableView的数据操作,大部分的数据都可以放在一个数组中。在对界面的某一行或组进行修改等操作时,最好直接去修改这个数组,然后通过上面提到的四个接口进行刷新。
  3. 针对插入、删除、移动,同样是要修改数组,稍微不同的是,需要重写这些方法,在里面完成对数组的插入、删除和移动等操作。

简单的代码片段

/* 声明一个m_listData为UITableView的数据源数组 */

- (void)viewDidLoad {
    [super viewDidLoad];

    m_listData = [[NSMutableArray alloc] initWithObjects:@"测试行",@"测试行",@"测试行",@"测试行",@"测试行", nil];
    
    CGRect frame = CGRectMake(0, TopBarHeight, SCREEN_WIDTH, SCREEN_HEIGHT-TopBarHeight);
    _tableView = [[UITableView alloc] initWithFrame:frame style:UITableViewStylePlain];
    _tableView.dataSource = self;
    _tableView.delegate = self;
    _tableView.rowHeight = 60;
    _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    _tableView.tableFooterView = [[UIView alloc] init];
    [self.view addSubview:_tableView];
    
    [_tableView registerClass:[FHMainViewCell class] forCellReuseIdentifier:FHMainCellID];
    
    UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"刷新" style:UIBarButtonItemStylePlain target:self action:@selector(onTap)];
    self.navigationItem.rightBarButtonItem = item;
}


#pragma mark - UITableViewDataSource

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
    return m_listData.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:FHMainCellID];
    cell.textLabel.text = m_listData[indexPath.row];
    return cell;
}

// 刷新操作(在这里修改数组,并进行刷新)
- (void)onTap {
    [m_listData replaceObjectAtIndex:0 withObject:@"替换的内容"];
    
// 行刷新
    NSIndexPath *path = [NSIndexPath indexPathForRow:0 inSection:0];
    NSArray *array = @[path];
    [_tableView reloadRowsAtIndexPaths:array withRowAnimation:UITableViewRowAnimationRight];
  
// 组刷新方式  
//    NSIndexSet *section = [NSIndexSet indexSetWithIndex:1];
//    [_tableView reloadSections:section withRowAnimation:UITableViewRowAnimationLeft];
}
    

Tip2:滚动操作
// 有时间了再更新
Tip3:编辑操作
// 有时间了再更新

你可能感兴趣的:(UITableView控件的一些使用技巧)