整体进度
目前主页tableview大体框架初步搭建,顶部headerview固定,cell中的header也固定,cell中嵌套tableview完成创建并成功拉取数据。
遇到的问题
1.多section多headerview会导致下面的headerview将第一个headerview顶出
在制作主页tableview的时候,设置了两个分组(section),分别都设置了header,想要的到第一个header吸顶,第二个吸在第一个下面的效果,但是未能解决,于是采用外部固定headerview的形式,将tableview整体放在外部固定的headerview的下面,在tableview里面设置第二个分组的headerview这样就可以得到我们想要的效果了。
2.在tableviewcell里嵌套tableview
创建UITableviewcell类,添加tableview代理方法,在.m文件中实现这两个方法对cell类进行初始化,你想要添加的东西都可以写在里面初始化。
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 240)];
self.tableView.dataSource = self;
self.tableView.delegate = self;
[self.tableView registerClass:[WeatherTableViewCell class] forCellReuseIdentifier:@"Cell"];
self.tableView.backgroundColor = [UIColor clearColor];
[self addSubview: self.tableView];
}
//self.arr = @[@"星期一",@"星期二",@"星期三",@"星期四",@"星期五",@"星期六"];
return self;
}
- (void)layoutSubviews {
[super layoutSubviews] ;
self.tableView.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 240);
}
之后就是代理方法。
在你要使用这个cell的地方需要注册,类似这样⬇️
[self.tableView registerClass:[FutureTableViewCell class] forCellReuseIdentifier:@"myCell2"];
3.由于我代码不规范,导致没有正确使用cell的复用方法
我在tableview里面初始化了一个cell,然后在每一个cell里面又定义了一个cell,但是没有return,导致嵌套tableview的时候没有完成操作,嵌套的tableview就被释放了。
4.动态数组的使用
本来我是想要请求天气数据,然后将他们的每一个字符串NSString数据存入到NSMutableArray动态数组中,但由于没有初始化给出空间,以及初始化cell的时候cell个数和数据个数不匹配导致数组越界。
5.block数据回调
个人理解,因为block每次都是在其他程序执行完才去执行,所以如果你想得到block里面请求的数据,你就需要在定义block方法的后面加上completion,类似于这样⬇️
然后在block方法里面的到了你想要的数据之后通过这样的代码将它回掉出来。
completion(self.thisWeather);
然后就可以在你想要得到数据的地方,把数据带出来并存起来。
但是要注意,调用你在block里得到的数据也要在block内完成,因为他毕竟是最后执行的,你只需要在他执行之后去调用他就可以了,包括刷新页面。像这样⬇️
这样子你就可以在,headerView和tableView里面使用block里面得到的数据啦~
luhh~⛽️?