web-dev-qa-db-ja.com

UITableview reloaddata with animation

Iamには、配列とドロップダウンリストから生成されるUItableviewがあります。ドロップダウンリストの行を選択すると、配列に新しい値が挿入され、tableviewがリロードされます。新しい配列の内容でテーブルビューをアニメーション化する方法は?前もって感謝します

私のようなアニメーションは1行ずつ見せたいです。私はこの方法を試しました

- (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];
 }
65
Naveen Pathiyil

正解に追加するには、UITableViewの-​​allセクションをリロードする場合、次の手順を実行する必要があります。

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) 

これにより、テーブルビューのすべてがアニメーションで再ロードされます。偉ぶって。

105

この方法を使用して、

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

Swift

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

スイフト2

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

私はこれでSwiftに行きました

43
Tom Howard

まず、beginUpdatesを使用して更新を予期するようにtableViewに指示します。次に、関連するセクションを更新します(tableViewにセクションが1つしかない場合は、セクション番号にゼロを渡すだけです)。ここでアニメーションを指定します-好きな効果を得るためにそれをいじることができます。その後、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];
21
Jai Govindani

Swift 3では、次のextensionUITableViewに追加するだけです。

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

reloadSections:withRowAnimation:関数を使用できます。 ITableView Class Reference を確認してください。

これを確認してください reloadData with Animation すでにあなたの質問に答えています。

5
arthankamal

以下のメソッドは、アニメーションの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    };

これが役立つことを願っています!

3

これを試しましたが、TableAnimatedです

//テーブルビューをリロードする場所にこのコードを配置します

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

UITableViewの再読み込み中にビューの遷移を変更しながらアニメートしてみてください

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