簡體   English   中英

如何從Objective-C中的視圖控制器訪問主窗口?

[英]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.

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