在tableView中预加载单元格以与mapView一起使用

时间:2010-07-01 08:58:47

标签: iphone iphone-sdk-3.0

我有一个mapView和tableView,mapView中的每个注释都与表中的一个单元格相对应。我想要做的是在地图上选择注释的任何时候选择适当的单元格。

截至目前,我在创建单元格时创建一个NSDictionary,它将行号映射到annotationID。这是有效的,但问题是字典没有完全填充,直到所有单元格都已创建,并且所有单元格都没有创建,直到您在表格中一直滚动。因此,当应用程序第一次启动时,只能从mapView中选择最初可见的4个注释。

所以我正在寻找的是一种自动填充字典的方法,或者是一种更好的方法来完成我需要做的事情。非常感谢!

1 个答案:

答案 0 :(得分:1)

嗯,首先想到的是,不是在滚动期间填充NSDictionary,而是在viewDidLoad期间填充它。我做了类似的事情,我将所有数据填充到NSDictionary然后使用它在滚动可重用单元格期间初始化/更新单元格上的UI。

此外,通过将数据放入某种数组中,您还可以将其映射到单元格。请记住,数组从0开始,所以position in table = indexOfYourArray + 1

  

将存储在plist中的数组加载到viewDidLoad中的NSArray中的简单示例

// Load the data 
    NSString *pathToFile = [[NSBundle mainBundle] pathForResource:someArrayNameString ofType:@"plist"];
    self.someArrayYouCreated = [NSArray arrayWithContentsOfFile:pathToFile];

现在您只是将一大堆数据转储到该数组中,您可以在cellForRowAtIndexPath

滚动期间填充它
NSDictionary *dataItem = [someArrayYouCreated objectAtIndex:indexPath.row];

UILabel *label;
label = (UILabel *)[cell viewWithTag:1];
label.textColor = [UIColor colorWithRed:(58/255.f) green:(58/255.f) blue:(58/255.f) alpha:1.0];
label.text = [dataItem objectForKey:@"PersonName"];

通过此示例,您只需填充在viewDidLoad中创建的数组中的单元格,因此几乎可以立即使用所有数据。如果你有大量的数据,你也可以抛出一个进度循环来延迟一秒,直到数组加载完毕。

同样,我不太明白你是如何存储你的数据的(因为你没有说过这些),所以我只能推测这对你有用。在你提供更多细节之前,这是我能做的最好的事情。