Пользовательские разделы в TableView

#iphone #ios #uitableview #nsfetchedresultscontroller #transient

#iPhone #iOS #uitableview #nsfetchedresultscontroller #переходный

Вопрос:

Я просмотрел несколько сообщений на этом сайте, но не нашел своей точной проблемы, поэтому я ищу несколько советов. В настоящее время у меня есть приложение с объектом TaskList, который я использую для резервного копирования моего текущего TableView. Я хотел бы создать разделы на основе нескольких атрибутов объекта. Например, у меня есть атрибут «isShared» bool и атрибут «completed» bool , и я хотел бы отображать разделы для группировки «общих» элементов, «не общих» элементов и «завершенных» элементов.

Является ли это ситуацией, когда свойство transient будет работать? Большинство приложений, которые я видел, применяются только к одному атрибуту, поэтому я не смог обмозговать это.

Заранее спасибо.

Ответ №1:

У меня в голове есть идея, но это может быть не лучшим решением. Можете ли вы создать три массива, содержащих объекты для «isShared», «notShared» и «completed», на основе ваших атрибутов bool?

Затем в ваших методах ячейки tableview

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    //Custom your cell for different section here
    switch (indexPath.section)
    {
         //First section is shared item
         case 0:
              if(cell == nil){
                  cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
             //Custom your cell here, for example, you can assign an item in your list to the cell's textlable
             cell.textLabel.text = [sharedArray objectAtIndex:[indexPath row]];
             }
             break;
         case 1:
              if(cell == nil){
                   cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
              //Custom your cell for not shared item here
              cell.textLabel.text = [notSharedArray objectAtIndex:[indexPath row]];
              }
              break;
          case 2:
              if(cell == nil){
                   cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
              //Custom your cell for not shared item here
              cell.textLabel.text = [CompletedArray objectAtIndex:[indexPath row]];
              }
               break;
          default:
               break;
    }
    return cell;
}
  

Таким образом, вы получаете три раздела в табличном представлении, сгруппированные по атрибутам bool. Если вы измените один элемент в своем списке, то есть предоставите общий доступ к одному неразделяемому элементу из неразделяемого раздела, то вам может потребоваться реализовать метод для перемещения этого объекта из unSharedArray в SharedArray, а затем вызвать

 [tableView reloadData]
  

чтобы обновить представление таблицы.

Ответ №2:

Я бы использовал словарь с массивами. Я бы заполнил словарь в init или методе viewDidLoad viewDidLoad в TableViewController.