注册 登录
主题 : 关于tableView中DataSource的一个问题
级别: 新手上路
UID: 479132
精华: 0
发帖: 15
可可豆: 51 CB
威望: 51 点
在线时间: 127(时)
注册时间: 2015-06-06
最后登录: 2018-01-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
发帖: 24
可可豆: 60 CB
威望: 58 点
在线时间: 237(时)
注册时间: 2015-09-29
最后登录: 2018-01-16
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.
级别: 版主

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

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

状态: 连续签到 - [194天]
UID: 358979
精华: 0
发帖: 1341
可可豆: 2521 CB
威望: 2142 点
在线时间: 1262(时)
注册时间: 2014-08-12
最后登录: 2018-01-23
4 楼:  发表于: 2018-01-11 11:33    发自: Web Page
楼上正解
然并卵!!!!
级别: 新手上路
UID: 479132
精华: 0
发帖: 15
可可豆: 51 CB
威望: 51 点
在线时间: 127(时)
注册时间: 2015-06-06
最后登录: 2018-01-23
5 楼:  发表于: 2018-01-11 14:52    发自: Web Page
回 3楼(zuyu) 的帖子
我一直认为reloadData是用来重置tableView数据源和刷新页面中所有可用cell的UI的,不是么?
级别: 新手上路
UID: 479132
精华: 0
发帖: 15
可可豆: 51 CB
威望: 51 点
在线时间: 127(时)
注册时间: 2015-06-06
最后登录: 2018-01-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:]
级别: 新手上路
状态: 连续签到 - [24天]
UID: 622302
精华: 0
发帖: 26
可可豆: 176 CB
威望: 141 点
在线时间: 82(时)
注册时间: 2017-08-29
最后登录: 2018-01-23
7 楼:  发表于: 2018-01-12 11:04    发自: Web Page
回 6楼(DD_silence) 的帖子
你好,请问你怎么打印这些方法执行列表的,能否教一下我。
级别: 新手上路
UID: 479132
精华: 0
发帖: 15
可可豆: 51 CB
威望: 51 点
在线时间: 127(时)
注册时间: 2015-06-06
最后登录: 2018-01-23
8 楼:  发表于: 2018-01-12 14:28    发自: Web Page
回 7楼(追小沐) 的帖子
- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"%s",__func__);
}
级别: 新手上路
UID: 479132
精华: 0
发帖: 15
可可豆: 51 CB
威望: 51 点
在线时间: 127(时)
注册时间: 2015-06-06
最后登录: 2018-01-23
9 楼:  发表于: 2018-01-12 14:32    发自: Web Page
回 1楼(crash_lu) 的帖子
谢谢大牛
描述
快速回复

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

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

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