2009-11-17 8 views
0

У меня есть сгруппированное представление таблицы, которое заполняется данными XML в одном разделе. То, что я хотел бы сделать, - создать еще один раздел перед управляемым данными и применить к нему действие.Настроить управляемый данными TableView

Пример:

Пользователю предоставляется с кнопкой, которая говорит «использовать ваше текущее местоположение» (созданный вручную раздел) и ниже приведен список стран, пользователь может альтернативно выбрать выбор (данные ведомой секции)

Используйте меню настроек в качестве руководства. Есть несколько вариантов, которые являются одной строкой в ​​секции, поэтому они кажутся кнопками ...

Если это не имеет смысла, я попытаюсь объяснить это лучше.


Так у меня есть эти два очевидных строк кода ... достаточно простые

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
}  
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
     return [countrysData count]; 
    } 

То, что я хотел бы, чтобы иметь numberOfSectionsInTableView возврата 2 и имеют первый «раздел» сказать «Нажмите, чтобы использовать ваше текущее местоположение ", которое затем будет отображать карту, а вторая часть отображает список стран, в которых я в настоящее время работаю.

+0

Да, будет замечательно видеть некоторые детали. – Morion

+0

Так в чем же проблема? –

ответ

1
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    if(section == 0){ 
     return 1; 
    }else{ 
     return [countrysData count]; 
    } 
} 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 2; 
} 

, то вы должны выбрать, что делать в didSelectRowAtIndexPath: метод из-за indexPath.section. oh, и вы должны проверить indexPath.section в методе cellForRowAtIndexPath:.

+0

Хотелось бы, чтобы я мог выбрать как ваши, так и ответы gerry3, потому что я использовал комбинацию обоих. Я выбрал ваш, потому что ваш метод numberOfRowsInSection не дал мне никаких предупреждений, и Джерри сделал: -/ – rson

+0

Предупреждение не имело значения, но должно быть исправлено. Могу ли я хотя бы получить голос? :-) – gerry3

1

Вам просто нужно обновить все ваши реализации протоколов UITableViewDataSource и UITableViewDelegate, чтобы соответствующим образом учитывать новый раздел и его строки (строки).

Например, вот как обновить numberOfSectionsInTableView:, tableView:numberOfRowsInSection: и tableView:cellForRowAtIndexPath:, но вы хотите обновить по крайней мере tableView:didSelectRowAtIndexPath:, а также:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    // calculate the number of sections of non-data (might just be 1)  
    // calculate the number of sections for the data (you were already doing this, might just be 1) 
    // return the sum 
    return 1 + 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    NSInteger rowCount = 0; 
    switch (section) { 
    case 0: 
     // non-data section has 1 row/cell 
     rowCount = 1; 
     break; 
    case 1: 
     // data section uses an array 
     rowCount = [dataArray count]; 
     break; 
    } 
    return rowCount; 
} 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *nonDataCellID = @"NonDataCell"; 
    static NSString *dataCellID = @"DataCell"; 
    UITableViewCell *cell; 

    int section = [indexPath indexAtPosition:0]; 
    int row = [indexPath indexAtPosition:1]; 

    switch (section) { 
     case 0: 
      // or you can just use standard cells here 
      cell = [tableView dequeueReusableCellWithIdentifier:nonDataCellID]; 
      if (cell == nil) { 
       [[NSBundle mainBundle] loadNibNamed:@"NonDataCell" owner:self options:NULL]; 
       cell = nonDataCell; // nonDataCell is an IBOutlet to this custom cell 
      } 

      // configure non-data cell here (use tags) 
      UILabel *someLabel = (UILabel*)[cell viewWithTag:1]; 
      someLabel.text = @"Non-data cell"; 
      break; 

     case 1: 
      // or you can just use standard cells here 
      cell = [tableView dequeueReusableCellWithIdentifier:dataCellID]; 
      if (cell == nil) { 
       [[NSBundle mainBundle] loadNibNamed:@"dataCell" owner:self options:NULL]; 
       cell = dataCell; // dataCell is an IBOutlet to this custom cell 
      } 

      // configure data call here (using "row") 
      UILabel *someDataLabel = (UILabel*)[cell viewWithTag:1]; 
      someDataLabel.text = [[dataArray objectAtIndex:row] valueForKey:@"name"]; 
      break; 
     } 

    return cell; 
} 
0

Я уверен, что вы можете изменить возвращение метода UITableViewDataSource в 'numberOfSectionsInTableView:' на лету. Когда пользователь выбирает выбор дополнительного раздела, просто установите флаг, чтобы метод возвращал количество требуемых таблиц. Затем вы принудительно перезагружаете таблицу, и вы должны увидеть новый раздел.