最近写的天气预报中,在tableView中用到了ScrollerView,在自定义的途中发生了一些不可描述的问题,查看视图层级时,出现了巨多层,震惊了。
这是改好之后的代码,里面中的TimeView是我自定义的UIView,我发现,在tableView建立时,只有- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier这个方法会调用一次,其余的方法会多次调用,所以要在此方法中,先把要创建的东西都创建好,在其余的方法中就不要创建UI控件的东西,不然就完了,
#import "ScrollerTableViewCell.h"
#define W [UIScreen mainScreen].bounds.size.width
#define H [UIScreen mainScreen].bounds.size.height
@implementation ScrollerTableViewCell
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
self.backgroundColor = [UIColor clearColor];
self.scrollerView = [[UIScrollView alloc] init];
[self.contentView addSubview:_scrollerView];
self.scrollerView.contentSize = CGSizeMake(100 * 24, 160);
self.scrollerView.pagingEnabled = NO;
self.scrollerView.scrollEnabled = YES;
self.scrollerView.showsVerticalScrollIndicator = NO;
self.scrollerView.showsHorizontalScrollIndicator = NO;
self.timeViewArray = [NSMutableArray array];
for (int i = 0; i < 24; i++) {
TimeView *timeView = [[TimeView alloc] initWithFrame:CGRectMake(100 * i, 0, 100, 160)];
timeView.backgroundColor = [UIColor clearColor];
[_timeViewArray addObject:timeView];
}
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
_scrollerView.frame = CGRectMake(0, 0, W, 160);
}
- (void)creatScrollerView:(NSMutableArray *)imageNameArray andTimeArray:(NSMutableArray *)timeArray andTemArray:(NSMutableArray *)temArray {
for (int i = 0; i < 24; i ++) {
[_timeViewArray[i] getImage:[UIImage imageNamed:imageNameArray[i]] andTimeLabelText:timeArray[i] andTemperatureLabelText:temArray[i]];
[self.scrollerView addSubview:_timeViewArray[i]];
}
}
@end
刷新多次后,则样的效果就是正确的