Как анимировать ячейки табличного представления при переключении между кнопками UISegmentedControl? - PullRequest
1 голос
/ 22 августа 2011

Мое приложение выглядит как на картинке ниже

enter image description here enter image description here

У меня есть 3 кнопки в моем сегментированном элементе управления. Предположим, что нажатие кнопки «Отдел» отобразит 3 отдела, а нажатие кнопки «Имя» покажет 6 имен.

Я выполняю следующие шаги, чтобы сделать это ..

  1. Создать UISegmentedControl по этому коду

    segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Department", @"Name", @"ID",nil]];  //Initialize Segmented Control
    
    segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar; //Define bar type (optional)
    
    segmentedControl.selectedSegmentIndex = 0; //Define default clicked button
    
    [segmentedControl addTarget:self action:@selector(segmentClicked) forControlEvents:UIControlEventValueChanged];  //Set target and define which method should called when tapping buttons
    
    self.navigationItem.titleView = segmentedControl; //To add UISegmented Control in the title of the navigation bar
    
  2. Определить метод (segmentClicked) для UISegmented Control

    segment = segmentedControl.selectedSegmentIndex;
    
    if (segment==0) {
        //Do something for Department tab
        [self.tableView reloadData];
    }
    
    else if (segment==1) {
        //Do something for Name tab
        [self.tableView reloadData];
    }
    
    else {
        //Do something for ID tab
        [self.tableView reloadData];
    }
    
  3. Создайте ячейки со ссылкой на значение сегмента в методе tableView: cellForRowAtIndexPath:. (Так что мы можем получить различные ячейки для каждой кнопки UISegmentedControl)

    if (segment == 0) {
    
        cell.textLabel.text = [listOfDepartments objectAtIndex:indexPath.section]; //listOfDepartments is the NSMutableArray that contains list of Departments names
    
    }
    
    else if (segment == 1) {
    
        cell.textLabel.text = [listOfNames objectAtIndex:indexPath.section];  //listOfNames is the NSMutableArray that contains list of person names
    
    }
    
    else {
    
        cell.textLabel.text = [listOfIDs objectAtIndex:indexPath.section];  //listOfIDs is the NSMutableArray that contains list of person ID's
    
    }
    
    return cell;
    

Итак, наконец я получил вид, показанный на изображении выше.

Когда я нажимаю на кнопки UISegmentedControl, табличное представление перезагружает свои ячейки и показывает соответствующие значения. По умолчанию была выбрана кнопка «Отдел». Если я коснусь кнопки «Имя» (то есть в таблице будет отображаться 6 ячеек вместо 3), таблица изменится немедленно, без анимации. Он просто скрывает 3 ячейки названий отделов и показывает 6 ячеек, которые отображают имена людей без анимации. Я не мог найти способ сделать изменения в ячейке с плавной анимацией.

Что я должен реализовать, чтобы добиться плавной анимации?

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

Ответы [ 3 ]

0 голосов
/ 22 августа 2011

Используйте метод reloadSections: withRowAnimation:

Если у вас есть только один раздел, тогда передайте [NSIndexSet indexSetWithIndex: 0] в качестве первого аргумента в вышеуказанном методе. Во втором аргументе вы можете выбрать тип анимации.

0 голосов
/ 23 августа 2011

Может помочь попытка:

[self.tableView beginUpdates];
[self.tableView endUpdates];

в вашем методе segmentClicked вместо [self.tableView reloadData];

Эти методы иногда лучше анимируют изменения таблицы.

0 голосов
/ 22 августа 2011

Используйте insertRowsAtIndexPaths:withRowAnimation: и deleteRowsAtIndexPaths:withRowAnimation: методы, которые имеют опции для указания некоторых встроенных интересных анимаций.

typedef enum {
    UITableViewRowAnimationFade,
    UITableViewRowAnimationRight,    
    UITableViewRowAnimationLeft,
    UITableViewRowAnimationTop,
    UITableViewRowAnimationBottom,
    UITableViewRowAnimationNone,        
    UITableViewRowAnimationMiddle,      
} UITableViewRowAnimation;
...