带动画的UITableview reloaddata

Nav*_*yil 68 uitableview reloaddata ios

我有一个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];
 }
Run Code Online (Sandbox Code Playgroud)

Tim*_*own 109

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

ObjC

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

迅速

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

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

  • 这假设部分的数量没有改变.我用这个测试来保护它`[self.tableView numberOfSections] == [self numberOfSectionsInTableView:self.tableView]`否则我只是调用`[self.tableView reloadData]` (11认同)
  • 快速地像老板一样工作.谢谢 (4认同)
  • @TimWindsorBrown如何使用新数据“与原始数组不同的数据”重新加载表视图 (2认同)

mac*_*dit 52

使用这种方法,

[_tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
Run Code Online (Sandbox Code Playgroud)

  • 如果在重新加载期间有多个部分或多个部分正在更改,则它无法正常工作 (7认同)
  • @AlexeyF然后你将它们全部插入到NSIndexSet中,并调用上面的方法.如果你不能这样做,你的代码设计就会出现问题. (2认同)

Tom*_*ard 49

斯威夫特3

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

斯威夫特2

UIView.transitionWithView(myTableView, duration: 1.0, options: .TransitionCrossDissolve, animations: {self.myTableView.reloadData()}, completion: nil)
Run Code Online (Sandbox Code Playgroud)

我在Swift中使用了它

  • 这是最好的解决方案,因为它允许在调用之前和之后重新加载具有不同行数的节 (2认同)

Jai*_*ani 22

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

typedef enum {
   UITableViewRowAnimationFade,
   UITableViewRowAnimationRight,
   UITableViewRowAnimationLeft,
   UITableViewRowAnimationTop,
   UITableViewRowAnimationBottom,
   UITableViewRowAnimationNone,
   UITableViewRowAnimationMiddle,
   UITableViewRowAnimationAutomatic = 100
} UITableViewRowAnimation;
Run Code Online (Sandbox Code Playgroud)

到处玩,看看你想要哪一个.即使选择UITableViewRowAnimationNone有时也会产生很好的效果.表更新代码如下:

    [self.tableView beginUpdates];
    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
    [self.tableView endUpdates];
Run Code Online (Sandbox Code Playgroud)


Nat*_*nel 17

在Swift 3中,您只需将以下内容添加extensionUITableView:

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

  • 这是我的问题的一个很棒的解决方案.谢谢芽! (3认同)

art*_*mal 6

你可以使用reloadSections:withRowAnimation:功能.检查UITableView类参考.

使用动画检查此reloadData已经回答了您的问题.