我有一个mapView和tableView,mapView中的每个注释都与表中的一个单元格相对应。我想要做的是在地图上选择注释的任何时候选择适当的单元格。
截至目前,我在创建单元格时创建一个NSDictionary,它将行号映射到annotationID。这是有效的,但问题是字典没有完全填充,直到所有单元格都已创建,并且所有单元格都没有创建,直到您在表格中一直滚动。因此,当应用程序第一次启动时,只能从mapView中选择最初可见的4个注释。
所以我正在寻找的是一种自动填充字典的方法,或者是一种更好的方法来完成我需要做的事情。非常感谢!
答案 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
中创建的数组中的单元格,因此几乎可以立即使用所有数据。如果你有大量的数据,你也可以抛出一个进度循环来延迟一秒,直到数组加载完毕。
同样,我不太明白你是如何存储你的数据的(因为你没有说过这些),所以我只能推测这对你有用。在你提供更多细节之前,这是我能做的最好的事情。