[英]Displaying an array in a table view before the user see it
我正在從Firebase提取數據並在表格視圖中顯示它。 我用接收到的數據填充數組,並使用該數組填充tableview,但是未顯示數據。
我意識到問題是在填充數組之前正在加載tableview。 我嘗試將reloadData放入viewdidload中,但這會使數據在顯示后彈出,而且看起來並不干凈。
如何在視圖出現之前獲取表格視圖以加載數據,以使過渡順利進行?
這段代碼在我的viewdidload方法中:
let categoryRef = Database.database().reference().child("category/\(category)")
let user = Auth.auth().currentUser
if let user = user {
let uid = user.uid
categoryRef.observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.hasChildren(){
for child in (snapshot.value as? NSDictionary)! {
if let object = child.value as? [String:AnyObject]{
let name = object["name"] as! String
self.nameArray.append(name)
self.categoryDict["\(name)"] = child.key as! String
}
}
}
})
}
}
追加所有子項后,嘗試重新加載數據:
let categoryRef = Database.database().reference().child("category/\(category)")
let user = Auth.auth().currentUser
if let user = user {
let uid = user.uid
categoryRef.observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.hasChildren(){
for child in (snapshot.value as? NSDictionary)! {
if let object = child.value as? [String:AnyObject]{
let name = object["name"] as! String
self.nameArray.append(name)
self.categoryDict["\(name)"] = child.key as! String
}
}
self.tableView.reloadData()
}
})
}
}
func insertSections(IndexSet, with: UITableViewRowAnimation)
調用func insertSections(IndexSet, with: UITableViewRowAnimation)
但請記住將其包裝在對beginUpdates
和endUpdates
。 還要確保在主隊列上更新UI。
因為
categoryRef.observeSingleEvent
如果是異步的,則應該在塊完成后重新加載表視圖,這是@barbarity建議的方式。
如果您想要更平滑的過渡,請開始通話
let categoryRef = Database.database().reference().child("category/\(category)")
在展示viewController之前,先設置數組,然后展示它。
但是在大多數情況下,使用異步處理的做法是開始在viewDidLoad上加載數據並具有UI加載機制(旋轉器)
我想您可以提出其他觀點,使您在數據准備好后感覺到“數據彈出”的感覺。
在極端情況下,您可以嘗試隱藏整個表視圖,甚至在屏幕上顯示“活動指示器”,然后在准備好表視圖的數據后顯示表視圖和隱藏指示器(在Objective-C中):
- (void)viewDidLoad {
//do init work ...
self.tableview.hidden = YES;
[self showIndicator];
[self requestDataFinish:^{
self.tableview.hidden = NO;
[self hideIndicator];
[self.tableview reload];
}];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.