簡體   English   中英

在哪里添加活動指示器視圖?

[英]Where to add activity indicator view?

我有兩個視圖控制器-我將簡稱為A和B,以幫助您輕松理解。

視圖控制器具有一個通過情節提要鏈接到B的按鈕(未手動編碼)。 並且,B視圖控制器使用viewDidLoad方法從數據庫服務器檢索一堆json數據。 由於檢索json數據需要花費一些時間,因此我需要添加一個活動指示器,以使用戶知道它正在執行某項操作-而不是凍結。 但是,我不確定應該在哪里添加活動指示器視圖。

如果您穿着我的鞋子,會在哪里添加它?

使用普通的界面構建器將其放置在您希望看到的位置,並將hidesWhenStopped變量設置為YES以便在完成數據獲取后不可見。 然后告訴它停止在JSON回調中。

在設計方面,“完成的事情”是將其放置在正在加載的任何內容的中間。 對於圖像,這將是顯示圖像的中間位置。 對於表格,您可能會在屏幕中間或空的“占位符”單元格上找到一個大型活動指示器。 考慮一下用戶的眼睛會去哪里嘗試查看所需的數據,而那正是他們應該看到的指示器。

我將使用標題中帶有消息的警報視圖,然后將一個子視圖添加到警報中,這是活動指示器。

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Doing something\nPlease Wait..." message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil, nil];
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
[alertView show];
indicator.center = CGPointMake(alertView.bounds.size.width / 2, alertView.bounds.size.height - 50);
[alertView addSubview:indicator];
[indicator startAnimating];

稍后在代碼中解雇...

[alert dismissWithClickedButtonIndex:0 animated:YES];

如果在viewDidLoad中有一個阻塞調用,這將導致UI在移動到B之前在A上凍結,所以我建議在A上添加活動指示器。盡管您可能會注意到由於對DB的阻塞調用,您的UI會立即更改在阻塞呼叫之前也將凍結,您將不會看到任何UI更改。

我通常的處理方式是為阻塞調用生成一個新線程,從而釋放UI的主線程,然后在必要時添加一個活動指示器(在A或B上取決於設計,但我建議在此在B上顯示它)可用性POV)。

為了避免自己管理所有這些麻煩,我通常最終會使用MBProgressHUD之類的東西或類似的易於管理的庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM