Попробуйте # 3:
Вы можете добавить индикатор активности в качестве нового представления поверх представления таблицы ... что-то вроде: http://tapadoo.com/2009/iphone-how-to-do-full-screen-activity-status - тогда хитрость будет выяснена, когда он фактически закончится. Я полагаю, что в вашем heightForRowAtIndexPath: методе вы можете сохранить какой-то счетчик строк и проверить, равен ли он> = счетчику строк модели данных. Это делает трюк?
Попробуйте №2:
Попробуйте закомментировать ваш переопределенный tableView: heightForRowAtIndexPath: метод полностью, и вместо того, чтобы создавать ячейки в cellForRowAtIndexPath: , попробуйте что-то вроде этого:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
CGRect contentRectTall = CGRectMake(0.0, 0.0, 302.0, 140.0);
CGRect contentRectMed = CGRectMake(0.0, 0.0, 302.0, 70.0);
CGRect contentRectSmall = CGRectMake(0.0, 0.0, 302.0, 42.0);
... cell dequeue etc ...
if ( ...the type of this cell is kRowTypeTall for example... ) {
cell = [[[UITableViewCell alloc] initWithFrame:contentRectTall reuseIdentifier:CellIdentifier] autorelease];
...
} else if ( ...the cell type is kRowTypeMed ) {
...
} else if ( ...the cell type is kRowTypeSmall ) {
...
}
... other cell customization ...
}
Кроме этого, вы можете захотеть взглянуть на «ленивую загрузку», где вы загрузите, скажем, первые 50 ячеек, а затем добавьте кнопку «загрузить еще 50» в конце.
Если вы уже знаете свой тип строки (который содержится в каком-либо источнике данных), его довольно быстро вытащить.
Что-то вроде ...
enum {
kRowTypeHuge = 0,
kRowTypeMed,
kRowTypeSmall
};
-(id)init {
...
NSArray *tableRows = [[NSArray alloc] initWithObjects:
[NSNumber numberWithUnsignedInt: 0],
[NSNumber numberWithUnsignedInt: 1],
[NSNumber numberWithUnsignedInt: 0],
[NSNumber numberWithUnsignedInt: 0],
[NSNumber numberWithUnsignedInt: 2],
nil
];
self.rows = tableRows;
[tableRows release];
...
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger rowType = [[[self.rows] objectAtIndex: indexPath.row] unsignedIntValue];
if(rowType == kRowTypeHuge) {
return 105.0;
} else if(rowType == kRowTypeMed) {
return 44.0;
}
return 20.0;
}
Чтобы быть уверенным в том, что heightForRowAtIndexPath - это проблема ... что-то вроде этого отображается очень быстро?
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 52.0;
}