我有一個TabBarController,其中包含3個TabBarItems。當單擊第二個TabBarItem時,將構建並加載UITableView。花費足夠長的時間來加載表格,沒有任何進展,並且用戶指示下一個場景正在前進將是禮貌的。但是,我一直無法得到這個工作。我已經嘗試使用GCD來實現加載掩碼,但只有在加載表時纔會顯示它。經過20秒後,情況並不理想。由於UITableView被構建和加載,無法顯示MBProgressHUD加載蒙版
我試過這個代碼以TabBarItem點擊迴應:
[MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0),
^{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"dispatch");
[self.navigationController.view.superview addSubview:HUD];
[MBProgressHUD hideHUDForView:viewController.view animated:YES];
});
});
我也試過它作爲UITableView的是正在興建
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_sync(queue, ^{
UIImage * image = [UIImage imageWithData:imageData];
dispatch_sync(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:self.navigationController.view animated:YES];
[cell.merchItemImageView setImage:image];
NSLog(@"shortDesc==%@",merchitem.itemName);
NSLog(@"itemPrice==%@",merchitem.itemPrice);
cell.merchItemShortDesc.text = [NSString stringWithFormat:@"%@",merchitem.itemName];
cell.merchItemPrice.text = [NSString stringWithFormat:@"$%@",merchitem.itemPrice];
});
});
感謝您的回覆@Grzegorz。但是,我無法弄清楚這一點。在點擊tabbaritem之後,轉換實際上是在Storyboard上進行的。上面的代碼分別在以下方法中實現 - - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController和 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath。我試圖按照你的建議分解工作,但是我不知道如何在表格單元格構建時如何去做。 –
你需要找到在你的tableview代碼中究竟花了多長時間。既然你說需要20秒,我會在''loadView'',''viewDidLoad''和其他在控制器生命週期中調用的方法中找到一個斷點來解決這個問題。你可以嘗試的另一件事是設置tableview空的「加載」消息,並在第一次調用「viewDidAppear」時實際構建單元格。到這個方法被調用時,「加載」消息應該是可見的。 –