我正在使用tableView:heightForRowAtIndexPath:
为UITableView
中的每个表格单元格设置自定义高度。这是一项昂贵的操作,但我还没有办法加快速度(将来我会尝试taber提到的一些方法)。
现在我只想显示某种加载屏幕。它不需要动画,只要在加载表视图时它是可见的。这可能吗?
编辑:我已经尝试了loading screen method mentioned in taber's answer,但由于它在与UITableView相同的线程中运行,因此在表视图加载完成后才会出现,因此在这种情况下不太有用:)答案 0 :(得分:1)
尝试#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;
}