Таблица iPhone: titleForHeaderInSection, полученная из массива - PullRequest
0 голосов
/ 04 мая 2010

У меня есть табличное представление, которое заполняется массивом. В настоящее время просмотр таблицы не имеет группировки. Я хотел бы проверить значение каждого объекта массива, например State, и сгруппировать все элементы CA вместе, все элементы OR вместе и т. Д. Затем назначьте этим группам заголовок.

Массив является динамическим и будет расти и получать новые значения в будущем, поэтому я не могу жестко закодировать заголовки, я хотел бы, чтобы они каким-то образом исходили из моего исходного массива.

В настоящее время я использую следующее, но оно не учитывает сортировку массива или удаление всех элементов в массиве, имеющих отношение к Калифорнии.

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
 if (section == 0) {
  return @"California";
 } else if (section == 1) {
  return @"Washington";
 } else {
  return @"Utah";
 }
}//end tableView

Итак, я путаюсь с тем, как это возможно. Любые советы будут оценены.

1 Ответ

3 голосов
/ 04 мая 2010

Я бы имел один массив на штат / провинцию / и т. Д. И поместил бы эти массивы в словарь, используя состояние в качестве ключа.Затем другой массив, содержащий все ключи состояния.Создайте / обновите массив ключей состояния, используя keysSortedByValueUsingSelector при добавлении или удалении словаря.И такой код для реализации делегатов таблицы ...

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return [stateKeyArray count];
}

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    return [stateKeyArray objectAtIndex:section];
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSString* stateKey = [stateKeyArray objectAtIndex:section];
    return [[dataDict objectForKey:stateKey] count];
}

EDIT : Эти массивы и словари могут быть объявлены так:

// key=state (an NSString), obj=NSMutableArray of AddressRecord objects
NSMutableDictionary* dataDict; 

// sorted array of state keys (NSString)
NSMutableArray* stateKeyArray;   

Toдобавить новую запись адреса, что-то вроде этого должно сделать это.Вам нужно что-то подобное, чтобы удалить адрес, но у вас должно быть достаточно, чтобы понять это.

-(void)addAddress:(AddressRecord* addr) {
    NSMutableArray* stateArray = [dataDict objectForKey:addr.state];

    if (stateArray==nil) {
       // adding a new state
       stateArray = [NSMutableArray new];
       [dataDict setObject:stateArray forKey:addr.state];  // add state array to dict
       [stateArray release];

       // update array of state keys (assuming they are NSString)
       self.stateKeyArray = [dataDict keysSortedByValueUsingSelector:@selector(localizedCompare:)];
    }

    [stateArray addObject:addr];   // add address to state array
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...