2011-12-08 59 views
2

我希望我的標題有意義。iPhone SDK - 通過UIViewController從AppDelegate顯示UIView

我有一個iPhone應用程序使用標準的UINavigationController方法來推送新的視圖控制器,並讓用戶按照他們的意願導航。

現在,在我的AppDelegate我有一個方法運行在一個計時器,該計時器調用Web服務。如果此服務返回特定響應,我希望能夠顯示一個UIView(本質上是一個自定義警報框,但我不想使用UIAlertView類)。

如何我能得到這個的UIView(在AppDelegate定義)顯示在UIWindow - 因此對任何頂部和已經由導航控制器推所有的意見?

回答

6

你的AppDelegate應該有一個屬性window。窗口是一個視圖,所以你可以做[self.window addSubview:newView];

注意:另外UIViews,添加到應用程序的視圖層次結構有一個屬性window,指向同一個對象。所以視圖控制器可以在不處理應用程序委託的情況下到達窗口。

[controller.view.window addSubview:overlayView]; 

確保這是在您設置了rootViewController之後。您也許需要[self.window bringSubviewToFront: newView]

+0

你可能意味着'[controller.view.window addSubview:OverlayView的]'? –

+0

嗯,可能。很久以前... – vikingosegundo

1

您可能想要抓住導航控制器堆棧中最頂層的視圖控制器,然後使用它來呈現新視圖的模態...在自定義警報視圖中設置引用,以便它可以消除自身...

CustomAlert * alert = [[CustomAlert alloc] initWithwhatever]; 
UIViewController * currentVC = navigationController.topViewController; 
alert.delegate = currentVC; 
[currentVC presentModalViewController:alert animated:YES]; 


//then dismiss from the alert logic with 

[delegate dismissModalViewControllerAnimated:YES]; 
+0

這將不起作用,因爲模態視圖下的視圖將被刪除。 –

1

我認爲你需要這一個:

[UIApplication.sharedApplication.delegate.window addSubview:yourViewController.view] 
+0

醜。爲什麼不利用objc-2.0並改用'[UIApplication.sharedApplication.delegate.window addSubview:]'? –

+0

@ RichardJ.RossIII媽媽..你是對的。 :p – Kjuly