2012-10-22 72 views
1

我想在我的應用程序中使用等待對話框使用MBProgressHUD使用等待對話框導航到另一個ViewController

我在我的應用程序中有一個按鈕。當用戶點擊它,我們導航到另一個的viewController:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
ViewController2 *yourViewController = (ViewController2 *)[storyboard instantiateViewControllerWithIdentifier:@"FavoritePage"]; 
[self.navigationController pushViewController:yourViewController animated:YES]; 

而且你也知道它也可以從interface builder設置。

的事情之一是它需要很短的一段時間,直到下一個頁面加載,我想在此期間顯示等待對話框:

- (IBAction)navigation:(id)sender { 
    [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    ViewController2 *yourViewController = (ViewController2 *)[storyboard instantiateViewControllerWithIdentifier:@"FavoritePage"]; 
    [self.navigationController pushViewController:yourViewController animated:YES]; 
} 

,但它不工作。

當我刪除相關的導航代碼,只需使用這樣的:

[MBProgressHUD showHUDAddedTo:self.view animated:YES]; 

等待對話框成爲出現,但是當我使用的導航代碼和這一行,不顯示等待對話框和導航工程。

我該如何讓他們一起工作?

只是想補充一點,隱藏等待對話框,我這個也:

- (void) viewDidDisappear:(BOOL)animated { 
    [MBProgressHUD hideHUDForView:self.view animated:YES]; 
} 

回答

1

相反的另一種觀點稱之爲NSNotification

- (IBAction)navigation:(id)sender { 
    [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    ViewController2 *yourViewController = (ViewController2 *)[storyboard instantiateViewControllerWithIdentifier:@"FavoritePage"]; 
    [self.navigationController pushViewController:yourViewController animated:YES]; 
} 

嘗試,

- (IBAction)navigation:(id)sender { 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    ViewController2 *yourViewController = (ViewController2 *)[storyboard instantiateViewControllerWithIdentifier:@"FavoritePage"]; 
    [self.navigationController pushViewController:yourViewController animated:YES]; 
    [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES]; 
} 

否則,您需要在ViewController2添加showHUDAddedTo法「方法。

+0

是的,這是可能的,但是當我點擊按鈕時,需要幾秒鐘,直到我們導航到其他頁面。 (因爲它開始從雲端讀取數據)。所以我看到的是秒鐘的第一頁。我想在那裏添加ProgressHUD。當第二頁加載時不需要顯示等待對話框。 – Ali

+0

有什麼辦法可以在iPhone中使用一種AsyncTask? (這可能在Android中) – Ali

+1

在這種情況下,你需要將它添加到self.navigationController.view而不是你的ViewController.view,我猜。 – iDev

0

我認爲這個問題是在你的- (IBAction)navigation:(id)sender {} ,因爲你第一次,顯示MBProgressHUD,然後推到ViewController2。因此,MBProgressHUD已被顯示,但隨着它推動新的觀點。

如果您想顯示等待標誌,那麼您可以使用帶定時器的MBProgressHUD。將計時器設置爲1.0或2.0秒。之後致電navigation方法。使計時器失效並刪除MBProgressHUD

否則,您可以使用

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(yourMethod) name:@"notificationName" object:nil];

在`

- (IBAction爲)導航:(ID)發送{}。

,並從像[[NSNotificationCenter defaultCenter] postNotificationName:@"notificationName" object:nil]; `

+0

你對打電話定時器的建議不好。我不打算讓應用程序更耗時。 – Ali

+0

你對使用'NSNotification'的建議很好。但事情是我正在使用故事板。我無法以我想要的方式製作通知作品。你是否實現了這樣的事情,或者這只是一個猜測?如果您有經驗,請分享更多代碼。 (只是想補充一點,我知道如何使用通知,但我們如何使它與ProgressDialog一起使用?) – Ali

+0

@Ali我沒有在故事板中使用'NSNotification' ....但正如你所說的關於定時器,我認爲它不會耗時或加載應用程序。它創建自己的線程,並單獨運行。一旦你完成,使計時器無效。所以,從我的角度來看,你至少要試試'NSTimer scheduleTimer .....'.. :) – Krunal

相關問題