情况:
我有一个视图控制器,它有一个表视图,它从数组中获取数据。由于该数组的数据加载速度很慢,我让元素按需加载(在 tableView:cellForRowAtIndexPath: 处触发)。
问题:
在开始时(即在视图加载后)它只加载可见单元格(前 6 个)。但是,当您尝试滚动时,它会立即加载其他所有人!(通过负载断点测试,显然 [UITableView _createPreparedCellForGlobalRow:withIndexPath:] 为每一行调用)
编码:
PlayerListDataModel.m
@implementation PlayerListDataModel
(...)
-(NSString *)nombre {
if (!self.loaded) [self load];
return _nombre;
}
-(void)load {
NSLog(@"Loading %d", self.sqlId);
[OMNIGAME loadListCell:self];
self.loaded = YES;
}
@end
PlayerListViewController.m
@implementation PlayerListViewController
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; }
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.jugadores.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString* cellId = @"PlayerListCell";
PlayerListCell* cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (!cell) {
cell = [[PlayerListCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
}
PlayerListDataModel* data =[self.jugadores objectAtIndex:indexPath.row];
cell.dem = data.bestDem;
cell.nombre = data.nombre;
cell.apellido = data.apellido;
cell.escudo = data.escudo;
cell.equipo = data.equipo;
cell.age = data.edad;
cell.bandera = data.bandera;
cell.price = data.price;
cell.energia = data.energy;
cell.valor = data.valor;
return cell;
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return tableView.bounds.size.height/7;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return tableView.bounds.size.height/7;
}
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
if (!self.search) {
self.search = [[PlayerSearchView alloc] init];
self.search.search.delegate = self;
}
return self.search;
}
问题:
这是预期的行为吗?如果是,是否有任何方法可以破解它?如果没有,我做错了什么?