[英]How to access main window from view controllers in Objective-C?
我創建了一個名為HomeViewController
的自定義視圖控制器,它繼承自UIViewController
。 在主應用程序委托中,我通過在函數applicationDidFinishLaunching
調用[window addSubview:homeViewController.view]
顯示它。 是的,一切正常。
現在我在HomeViewController
xib文件中添加一個按鈕。 當我點擊它時,我希望window
刪除當前視圖並添加另一個navigationController
。 我在HomeViewController.m
創建一個函數並鏈接到按鈕,但我不知道如何從那里訪問屬性window
。 window
是主應用程序委托中的局部變量,按鈕單擊處理程序位於HomeViewController
。 我正在考慮做與上面類似的事情,即添加navigationController.view
作為window
子視圖。
抱歉! 我對這個iphone應用程序開發很新。 我並沒有真正了解應用程序流程應該如何。 也許我的項目結構出了問題?
您可以使用以下行訪問應用中任何位置的主窗口
[[[UIApplication sharedApplication] windows] objectAtIndex:0]
[(AppDelegate *)[[UIApplication sharedApplication] delegate] window]
可能會幫助您訪問委托的window
屬性。
AppDelegate
是您的委托類名稱。
您可以向UIViewController添加擴展。 在Swift中:
extension UIViewController {
var window : UIWindow {
return UIApplication.shared.windows.first!
}
}
現在,您可以從任何視圖控制器中訪問它。 例如:
override func viewDidLoad() {
super.viewDidLoad()
self.window.tintColor = .orange
}
表面上你應該有一個窗口,所以你應該能夠安全地強行打開窗口,但是,如果你正在做與窗口層次結構不同的事情,你可以選擇它:
extension UIViewController {
var window : UIWindow? {
return UIApplication.shared.windows.first
}
}
使用期權的實施:
override func viewDidLoad() {
super.viewDidLoad()
if let window = self.window {
window.tintColor = .orange
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.