CellForrowatIndExpath和NSBundle Mainbundle的问题
-
16-10-2019 - |
题
有解决这个问题的想法吗?
这是 正确与错误的方式 尊重:
这是工作代码:
- (UITableViewCell *)[...] cellForRowAtIndexPath:(NSIndexPath *)indexPath {
@try {
newsRow = ((NewsRowController *)[tableView dequeueReusableCellWithIdentifier:@"cell"]);
if (newsRow == nil) {
if ( [[Device GetModel] isEqualToString:@"iPad Simulator"] ||
[[Device GetModel] isEqualToString:@"iPad"])
[[NSBundle mainBundle] loadNibNamed:@"NewsRow_ipad" owner:self options:nil];
else [[NSBundle mainBundle] loadNibNamed:@"NewsRow" owner:self options:nil];
if ([tableArray count] > 0)
[newsRow setData:[tableArray objectAtIndex:indexPath.row]];
}
}
@catch (NSException * e) {
NSLog(@"a!!!!!");
}
return newsRow;
}
...但是因为在我的3G设备中 慢慢地 当我向上/下滚动表 我以这种方式更改了代码,将设备插入viewDidload中并将其传递给 cellForRowAtIndexPath
:
NSArray *cRow;
@property (nonatomic, retain) NSArray *cRow;
[...]
@syntetize cRow;
- (void)viewDidLoad {
[...]
if ( [[Device GetModel] isEqualToString:@"iPad Simulator"]
||
[[Device GetModel] isEqualToString:@"iPad"])
cRow = [[[NSBundle mainBundle] loadNibNamed:@"NewsRow_ipad" owner:self options:nil] retain];
else cRow = [[[NSBundle mainBundle] loadNibNamed:@"NewsRow" owner:self options:nil] retain];
[...]
}
- (UITableViewCell *)[...] cellForRowAtIndexPath:(NSIndexPath *)indexPath {
@try {
newsRow = ((NewsRowController *)[tableView dequeueReusableCellWithIdentifier:@"cell"]);
if (newsRow == nil) {
//
// ADDED CODE.
//
newsRow = [cRow objectAtIndex:0];
//
if ([tableArray count] > 0)
[newsRow setData:[tableArray objectAtIndex:indexPath.row]];
}
}
@catch (NSException * e) {
NSLog(@"a!!!!!");
}
return newsRow;
}
现在桌子只向我展示一排。如果我滚动,则行更改,但仅显示一行...
有什么问题?
有帮助吗?
谢谢,
一个
解决方案
在这种情况下,当您调用DequeueReusableCelleWithIdentifier时:您将获得零零,因为没有可以脱水的单元格。每次获得零单元格时,您都需要加载笔尖,否则您将不会在第一个单元格后添加任何单元格。
如果调用GetModel是放慢速度的原因,则可以在ViewDidload中调用并将其存储以供以后使用。
由于您在每个单元格中绘制的视图数量,因此您的桌子很可能不会顺利滚动。如果您的背景始终是纯色,则应确保要添加到单元格或不透明的所有视图。如果您需要图像或梯度背景,则应考虑在一个视图中绘制所有单元格。苹果有一个很好的例子,说明如何在这里做到这一点: TableViewSuite. 。专门检查TimeZoneView文件。
不隶属于 StackOverflow