注册 登录
主题 : 关于tableView中DataSource的一个问题
级别: 新手上路
UID: 479132
精华: 0
发帖: 20
可可豆: 65 CB
威望: 65 点
在线时间: 140(时)
注册时间: 2015-06-06
最后登录: 2018-03-23
0 楼:  发表于: 2018-01-10 17:30    发自: Web Page
来源于 一般提问 分类

关于tableView中DataSource的一个问题   

- (void)viewDidLoad {
    [super viewDidLoad];
    [self prepareTableView];
    [self prepareDataSource];
}
-(void)prepareDataSource{
    _dataSource = [[NSMutableArray alloc]init];
    for (int i = 0; i<20; i++) {
        NSString *s = [NSString stringWithFormat:@"%tu",i];
        [_dataSource addObject:s];
    }
}
-(void)prepareTableView{
    _tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];
    _tableView.delegate = self;
    _tableView.dataSource = self;
    [self.view addSubview:_tableView];
}
#pragma mark tableViewDelegate
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return _dataSource.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CELL"];
    if (!cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CELL"];
    }
    cell.textLabel.text = _dataSource[indexPath.row];
    return cell;
}
如上代码,很基础的tableView初始化,先创建tableView,再创建DataSource。我想问的是,代码中没有[_tableView reloadData],为什么_tableView会有数据?
关键词: tableView
级别: 新手上路

状态: 连续签到 - [2天]
UID: 510054
精华: 0
发帖: 37
可可豆: 73 CB
威望: 71 点
在线时间: 630(时)
注册时间: 2015-09-29
最后登录: 2018-10-19
1 楼:  发表于: 2018-01-10 17:59    发自: Web Page
https://developer.apple.com/documentation/uikit/uitableview

UITableView overrides the layoutSubviews() method of UIView so that it calls reloadData() only when you create a new instance of UITableView or when you assign a new data source. Reloading the table view clears current state, including the current selection. However, if you explicitly call reloadData(), it clears this state and any subsequent direct or indirect call to layoutSubviews() does not trigger a reload.
级别: 版主

状态: 连续签到 - [1034天]
UID: 430276
精华: 1
发帖: 804
可可豆: 6102 CB
威望: 4193 点
在线时间: 1117(时)
注册时间: 2015-01-17
最后登录: 2018-10-19
2 楼:  发表于: 2018-01-10 21:10    发自: Web Page
楼上正解
为了锤子
级别: 版主

状态: 连续签到 - [67天]
UID: 550118
精华: 2
发帖: 1899
可可豆: 3044 CB
威望: 2926 点
在线时间: 1314(时)
注册时间: 2016-03-14
最后登录: 2018-10-19
3 楼:  发表于: 2018-01-11 10:33    发自: Web Page
你先搞明白reloadData是干嘛用的
级别: 精灵王

状态: 连续签到 - [200天]
UID: 358979
精华: 0
发帖: 1407
可可豆: 2618 CB
威望: 2236 点
在线时间: 1447(时)
注册时间: 2014-08-12
最后登录: 2018-10-20
4 楼:  发表于: 2018-01-11 11:33    发自: Web Page
楼上正解
然并卵!!!!
级别: 新手上路
UID: 479132
精华: 0
发帖: 20
可可豆: 65 CB
威望: 65 点
在线时间: 140(时)
注册时间: 2015-06-06
最后登录: 2018-03-23
5 楼:  发表于: 2018-01-11 14:52    发自: Web Page
回 3楼(zuyu) 的帖子
我一直认为reloadData是用来重置tableView数据源和刷新页面中所有可用cell的UI的,不是么?
级别: 新手上路
UID: 479132
精华: 0
发帖: 20
可可豆: 65 CB
威望: 65 点
在线时间: 140(时)
注册时间: 2015-06-06
最后登录: 2018-03-23
6 楼:  发表于: 2018-01-11 15:35    发自: Web Page
知道原因了,tableView在didAppear之前会掉一次reloadData
2018-01-11 15:31:58.592319+0800 Test2[9574:769688] -[ViewController viewDidLoad]
2018-01-11 15:31:58.597790+0800 Test2[9574:769688] -[ViewController prepareTableView]
2018-01-11 15:31:58.599040+0800 Test2[9574:769688] -[ViewController viewWillAppear:]
2018-01-11 15:31:58.805699+0800 Test2[9574:769688] -[ViewController viewWillLayoutSubviews]
2018-01-11 15:31:58.805953+0800 Test2[9574:769688] -[ViewController viewDidLayoutSubviews]
2018-01-11 15:31:58.806717+0800 Test2[9574:769688] -[ReloadTest reloadData]
2018-01-11 15:31:58.808404+0800 Test2[9574:769688] -[ReloadTest layoutSubviews]
2018-01-11 15:31:58.808745+0800 Test2[9574:769688] -[ViewController viewWillLayoutSubviews]
2018-01-11 15:31:58.808970+0800 Test2[9574:769688] -[ViewController viewDidLayoutSubviews]
2018-01-11 15:31:58.809384+0800 Test2[9574:769688] -[ReloadTest layoutSubviews]
2018-01-11 15:31:58.814083+0800 Test2[9574:769688] -[ViewController viewDidAppear:]
级别: 侠客
状态: 连续签到 - [74天]
UID: 622302
精华: 0
发帖: 103
可可豆: 602 CB
威望: 472 点
在线时间: 317(时)
注册时间: 2017-08-29
最后登录: 2018-10-19
7 楼:  发表于: 2018-01-12 11:04    发自: Web Page
回 6楼(DD_silence) 的帖子
你好,请问你怎么打印这些方法执行列表的,能否教一下我。
级别: 新手上路
UID: 479132
精华: 0
发帖: 20
可可豆: 65 CB
威望: 65 点
在线时间: 140(时)
注册时间: 2015-06-06
最后登录: 2018-03-23
8 楼:  发表于: 2018-01-12 14:28    发自: Web Page
回 7楼(追小沐) 的帖子
- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"%s",__func__);
}
级别: 新手上路
UID: 479132
精华: 0
发帖: 20
可可豆: 65 CB
威望: 65 点
在线时间: 140(时)
注册时间: 2015-06-06
最后登录: 2018-03-23
9 楼:  发表于: 2018-01-12 14:32    发自: Web Page
回 1楼(crash_lu) 的帖子
谢谢大牛

本站内容均为本站转发,已尽可能注明出处。因未能核实来源或转发内容图片有权利瑕疵的,请及时联系本站,本站会第一时间进行修改或删除。 QQ : 3442093904

描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部