Предварительная загрузка ячеек в tableView для использования с mapView - PullRequest
1 голос
/ 01 июля 2010

У меня есть mapView и tableView, с каждой аннотацией в mapView, соответствующей ячейке в таблице.Что я хочу сделать, это выбрать соответствующую ячейку каждый раз, когда аннотация выбирается на карте.

На данный момент я создаю NSDictionary при создании ячеек, который отображает номер строки на annotationID.Это работает, но проблема в том, что словарь не заполняется полностью, пока не будут созданы все ячейки, и все ячейки не созданы, пока вы не прокрутите всю таблицу.Таким образом, когда приложение запускается в первый раз, из mapView можно выбрать только 4 первоначально видимые аннотации.

Так что мне нужен либо метод автоматического заполнения моего словаря, либо лучший способвыполняя то, что мне нужно сделать.Большое спасибо!

1 Ответ

1 голос
/ 01 июля 2010

Ну, сначала мы думаем, что вместо заполнения NSDictionary во время прокрутки, просто заполните его во время viewDidLoad .. Я делаю что-то похожее, когда я заполняю все свои данные в NSDictionary, а затем использую это для инициализации / обновления пользовательский интерфейс для ячеек во время прокрутки для многоразовых ячеек.

Кроме того, помещая ваши данные в какой-либо массив, вы также можете отобразить их в ячейках. Просто помните, что массивы начинаются с 0, поэтому position in table = indexOfYourArray + 1

Простой пример загрузки массива, хранящегося в plist, в NSArray в viewDidLoad

// 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, и, следовательно, все ваши данные готовы к использованию практически сразу. Если у вас есть тонна данных, вы также можете запустить круг выполнения, чтобы задержать его на секунду до завершения загрузки массива.

Опять же, я не совсем понимаю, как вы храните свои данные (поскольку вы ничего не сказали об этом), поэтому я могу только предполагать, что это сработает для вас. Пока вы не предоставите более подробную информацию, это лучшее, что я могу сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...