UITableview reloaddata с анимацией

Iam, имеющий UItableview, который заполняется из массива и выпадающего списка. Если я выберу любую строку выпадающего списка, массив будет вставлен с новыми значениями, а tableview должен перезагрузиться. Как оживить табличное представление с новым содержимым массива? заранее спасибо

как будто я хочу показать строку один за другим. Я пробовал этот метод

- (void)reloadRowsAtIndexPaths:(NSArray )indexPaths withRowAnimation:(UITableViewRowAnimation)animation { 
NSIndexPath rowToReload = [NSIndexPath indexPathForRow:[names count] inSection:0];
 NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil]; 
[tableDetails reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];
 }

Ответ 1

Чтобы добавить правильный ответ, если вы хотите перезагрузить разделы all в UITableView, вам нужно будет сделать следующее:

ObjC

NSRange range = NSMakeRange(0, [self numberOfSectionsInTableView:self.tableView]);
NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange:range];
[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationAutomatic];

Swift

let range = NSMakeRange(0, self.tableView.numberOfSections)  
let sections = NSIndexSet(indexesIn: range)               
self.tableView.reloadSections(sections as IndexSet, with: .automatic) 

Это перезагрузит все в представлении таблицы анимацией. Как босс.

Ответ 2

используйте этот метод,

[_tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];

Ответ 3

Swift 3

UIView.transition(with: myTableView, duration: 1.0, options: .transitionCrossDissolve, animations: {self.myTableView.reloadData()}, completion: nil)

Swift 2

UIView.transitionWithView(myTableView, duration: 1.0, options: .TransitionCrossDissolve, animations: {self.myTableView.reloadData()}, completion: nil)

Я пошел с этим в Swift

Ответ 4

Сначала вы скажете, что tableView ожидает обновления с помощью beginUpdates. Затем обновите соответствующие разделы (если ваш tableView имеет только один раздел, а затем просто пропустите нуль для номера раздела). Здесь, где вы указываете анимацию, вы можете поиграть с ней, чтобы получить необходимый эффект. После этого вы вызываете endUpdates в tableView. В typedef для UITableViewRowAnimation указано:

typedef enum {
   UITableViewRowAnimationFade,
   UITableViewRowAnimationRight,
   UITableViewRowAnimationLeft,
   UITableViewRowAnimationTop,
   UITableViewRowAnimationBottom,
   UITableViewRowAnimationNone,
   UITableViewRowAnimationMiddle,
   UITableViewRowAnimationAutomatic = 100
} UITableViewRowAnimation;

Поиграйте, чтобы посмотреть, какой из них вы хотите. Даже выбор UITableViewRowAnimationNone может иногда иметь хороший эффект. Код обновления таблицы ниже:

    [self.tableView beginUpdates];
    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
    [self.tableView endUpdates];

Ответ 5

В Swift 3 вы можете просто добавить следующее extension в UITableView:

extension UITableView {
    func reloadData(with animation: UITableView.RowAnimation) {
        reloadSections(IndexSet(integersIn: 0..<numberOfSections), with: animation)
    }
}

Ответ 7

Ниже метод поддерживается tableView для анимации:

- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);

Использование:

//Reload tableView with animation
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationRight]; 

Доступны различные типы анимации:

typedef NS_ENUM(NSInteger, UITableViewRowAnimation) {
UITableViewRowAnimationFade,
UITableViewRowAnimationRight,           // slide in from right (or out to right)
UITableViewRowAnimationLeft,
UITableViewRowAnimationTop,
UITableViewRowAnimationBottom,
UITableViewRowAnimationNone,            // available in iOS 3.0
UITableViewRowAnimationMiddle,          // available in iOS 3.2.  attempts to keep cell centered in the space it will/did occupy
UITableViewRowAnimationAutomatic = 100  // available in iOS 5.0.  chooses an appropriate animation style for you    };

Надеюсь, это поможет!

Ответ 8

Я пробовал это, а мой Table - Animated с плавной анимацией

//Поместите этот код, где вы хотите перезагрузить представление таблицы

dispatch_async(dispatch_get_main_queue(), ^{
    [UIView transitionWithView:<"TableName"> 
                      duration:0.1f 
                       options:UIViewAnimationOptionTransitionFlipFromRight 
                    animations:^(void) {
                        [<"TableName"> reloadData];
                    } completion:NULL];        
});

Ответ 9

Попробуйте анимацию при переходе Изменение вида во время перезагрузки UITableView

[UIView transitionWithView:_yourTableView 
                  duration:0.40f 
                   options:UIViewAnimationOptionTransitionCrossDissolve 
                animations:^(void) {[_yourTableView reloadData];}  
                completion:nil];