我创建了一个名为HomeViewController
的自定义视图控制器,它继承自UIViewController
。在主应用程序委托中,我通过在函数[window addSubview:homeViewController.view]
内调用applicationDidFinishLaunching
来显示它。是的,一切正常。
现在我在HomeViewController
xib文件中添加一个按钮。当我点击它时,我希望window
删除当前视图并添加另一个navigationController
。我在HomeViewController.m
中创建了一个函数并链接到按钮,但我不知道如何从那里访问属性window
。 window
是主应用委托中的局部变量,按钮单击处理程序位于HomeViewController
内。我正在考虑做与上面类似的事情,即将navigationController.view
添加为window
的子视图。
抱歉!我对这个iphone应用程序开发很新。我并没有真正了解应用程序流程应该如何。也许我的项目结构出了问题?
答案 0 :(得分:13)
您可以使用以下线
访问应用中任何位置的主窗口[[[UIApplication sharedApplication] windows] objectAtIndex:0]
答案 1 :(得分:5)
[(AppDelegate *)[[UIApplication sharedApplication] delegate] window]
可能会帮助您访问代理人的window
属性。
AppDelegate
是您的委托类名称。
答案 2 :(得分:0)
您可以为UIViewController添加扩展名。在斯威夫特:
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
}
}