1.线程问题:
在使用网络请求请求数据时,因为使用的是MVC模式,导致在请求到的数据没有返回的时候程序就已经开始了UI布局,导致UI中有需要用到获取到数据的地方程序崩溃,这里我将UI布局最终写在网络请求的Block回调中,解决这个问题,但是因为线程原因,它没有回到主线程再进行UI布局又导致程序崩溃,这时候需要将程序回到主线程然后再进行UI的布局。
//获取网络请求
- (void)GetNetworkModel {
[[NetworkModel shareNetworkModel] NetworkModelData:^(NetworkJSONModel * _Nullable networkModel) {
self.monthString = [networkModel.date copy];
//回到主线程
dispatch_async(dispatch_get_main_queue(), ^{
[self addUI];
});
} andError:^(NSError * _Nullable error) {
NSLog(@"请求失败!");
}];
}
//布局UI
- (void)addUI {
self.addKnowView = [[KnowView alloc] initWithFrame:CGRectMake(0, 0, myWidth, myHeight)];
self.addKnowView.dayLabel.text = [self.monthString substringWithRange:NSMakeRange(6, 2)];
NSString *month = [self.monthString substringWithRange:NSMakeRange(4, 2)];
self.addKnowView.monthLabel.text = [self changMonth:month];
[self.view addSubview:self.addKnowView];
}
2.cell中图片下载并加载:
具体的下载和使用参考:
iOS-SDWebImage的使用和实现原理
3.下拉数组刷新问题:
我是使用当前显示屏幕高度跟整个屏幕的高度进行比较,如果当前显示的屏幕高度小于你设定的刷新时的屏幕显示高度,就通知viewController进行刷新,同时获取网络请求的数据。我自己百度的还有两种方法,一种的是kvo监听来判断距离另一种是使用refresh库。
4. Masonry中mas_equalTo和equalTo的区别:
equalTo的类型为id,里面不能直接填数字,如果非要填,需要这么填:
make.width.equalTo(@100);
mas_equalTo是对参数进行转化后得到匹配的参数:
make.width.mas_equalTo(100);
所以,综上可以看出,mas_equalTo和equalTo实际上是一样的,只是各自类型不同。
5.cell上的头标题设置:
改变UITableView的headerView、footerView背景颜色
//与下面一同作用才能设置头标题
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {
UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
header.contentView.backgroundColor= [UIColor clearColor];
header.textLabel.text = @“sdsdsd”;
[header.textLabel setFont:[UIFont systemFontOfSize:20]];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
return @"111"; //该内容不会被显示,但是要一同使用
}