带动画的UITableview reloaddata

时间:2013-01-29 06:28:11

标签: ios uitableview reloaddata

我有一个UItableview,它从数组和下拉列表中填充。 如果我选择任何下拉列表行,则将插入具有新值的数组,并且应重新加载tableview。 如何使用新的数组内容为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];
 }

10 个答案:

答案 0 :(得分:106)

要添加正确答案,如果您要重新加载UITableView中的所有部分,则需要执行以下操作:

<强> ObjC

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

<强>夫特

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

这将使用动画重新加载表格视图中的所有内容。像老板一样。

答案 1 :(得分:52)

使用此方法,

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

答案 2 :(得分:41)

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中使用了这个。

答案 3 :(得分:21)

首先告诉tableView使用beginUpdates进行更新。然后更新相关的部分(如果你的tableView只有一个部分,那么只为部分编号传递零)。这里是你指定动画的地方 - 你可以玩它来获得你想要的效果。之后,您在tableView上调用endUpdates。 UITableViewRowAnimation的typedef指定:

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];

答案 4 :(得分:16)

在Swift 3中,您只需将以下extension添加到UITableView

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

答案 5 :(得分:5)

您可以使用reloadSections:withRowAnimation:个功能。检查UITableView Class Reference

选中已经回答了您问题的reloadData with Animation

答案 6 :(得分:3)

tableView for animation支持下面的方法:

- (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    };

希望这可能会有所帮助!

答案 7 :(得分:3)

我试过了这个,我的TableAnimated,动画流畅

//将此代码放在要重新加载表视图的位置

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

答案 8 :(得分:2)

在重新加载UITableView

时,尝试在转换视图时进行动画制作
[UIView transitionWithView:_yourTableView 
                  duration:0.40f 
                   options:UIViewAnimationOptionTransitionCrossDissolve 
                animations:^(void) {[_yourTableView reloadData];}  
                completion:nil];

答案 9 :(得分:0)

快捷键5:

let section = 0
tableView.reloadSections([section], with: .automatic)