2016-04-27 10 views
0

IOSでは、現在表示されていないUITableViewをリロードする可能性があります。私は、セルの内容が消えているいくつかの非常に特殊なバグを発見しましたが、別のTabに切り替えたときに起こるように見えました(最初のタブのtableViewを持つUIViewControllerはメモリに残っていて、表示されていないUITableViewのリロードデータ

そうライン:

dispatch_async(dispatch_get_main_queue(), { 

    self.tableView.reloadRowsAtIndexPaths([NSIndexPath(forRow: row, inSection: 0)], withRowAnimation: UITableViewRowAnimation.None) 

} 

は、実際に表示され、バグが起こった場合、これはされていないテーブルの表示を変更するコードを実行しています。

viewControllerにViewDidAppearとViewDidDisAppearにいくつかのコードを追加すると、基本的にtableViewの更新がブロックされます(そして、そのviewControllerを再入力すると完全に更新されます)。

dispatch_async(dispatch_get_main_queue(), { 

     if self.delegate.viewIsDisplayed() { 
     self.tableView.reloadRowsAtIndexPaths([NSIndexPath(forRow: row, inSection: 0)], withRowAnimation: UITableViewRowAnimation.None) 
     } 

    } 

私は、問題が起こっていた理由がわからないし、誰かが私が前に見たものにいくつかの光を当てることができるかもしれない期待していた(細胞がランダムにコンテンツをクリアした後、後続の各リロードに再登場)

答えて

0

reloadRowsAtIndexPaths()は常に何らかの形のアニメーションを試行しますが、デフォルトのアニメーションを使用するように指示するだけではありません(docs参照)。これはあなたのセルの内容を乱すかもしれないtableViewの内容は表示されません。

tableViewがオフスクリーンの場合は、reloadDataを試してみるか、cellForRowAtIndexPathを使用してセルを手動で取得して内容を編集してください。

文書には、内容が変更されたことを示す必要がない場合に、後で説明されています。

関連する問題