所以,self
为UIWindow
,但是如何在当前获取visibleViewController?
答案 0 :(得分:1)
在swift3:
func getVisibleViewController(_ rootViewController: UIViewController?) -> UIViewController? {
var rootVC = rootViewController
if rootVC == nil {
rootVC = UIApplication.shared.keyWindow?.rootViewController
}
if rootVC?.presentedViewController == nil {
return rootVC
}
if let presented = rootVC?.presentedViewController {
if presented.isKind(of: UINavigationController.self) {
let navigationController = presented as! UINavigationController
return navigationController.viewControllers.last!
}
if presented.isKind(of: UITabBarController.self) {
let tabBarController = presented as! UITabBarController
return tabBarController.selectedViewController!
}
return getVisibleViewController(presented)
}
return nil
}
答案 1 :(得分:0)
如果添加子视图控制器:
let viewControllersVisible = self.rootViewController?.childViewControllers.filter({ $0.isVisible && $0.view.window })
这将返回在视图层次结构中添加的UIViewControllers
数组,它不会说用户是否真的能够看到这些视图控制器,具体取决于您的层次结构。
如果您仅以模态方式呈现视图控制器:
let viewControllerVisible = self.rootViewController?.presentedViewController
答案 2 :(得分:0)
您应该查看此answer。它的要点是你从窗口的.rootViewController
开始。在我自己的代码中(使用UINavigationController
作为.rootViewController
,我使用此代码(在AppDelegate
中):
if let nvc = self.window?.rootViewController as? UINavigationController {
if let mvc = nvc.topViewController as? MasterViewController {
// ... do something
} else if let dvc = nvc.topViewController as? DetailViewController {
// ... do something
}
}
请注意,如果您使用Master-Detail应用程序的默认模板,则需要考虑插入自身的SplitViewController
,但这应该从样板代码中明显地显而易见。
答案 3 :(得分:-1)
为了获得对层次结构中最顶层视图控制器的引用,请尝试以下代码
UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topController.presentedViewController)
{
topController = topController.presentedViewController;
}
return topController;
答案 4 :(得分:-1)
如果你想在窗口的最顶层视图尝试使用它,你将获得视图。
var theWindow = editor.windowManager.open({
html: '<iframe id="iframeID" src="iframeURL" frameborder="0"></iframe>',
buttons: [
{
text: 'Cancel',
subtype: 'secondary'
},
{
text: 'Submit',
onclick: 'submit',
subtype: 'primary mySubmitButton'
}
],
});
$('#iframeID').on('load', function(){
selectedSnippets.on('change', function(e){
theWindow.statusbar.$el.find('.mySubmitButton .mce-txt').text(text);
});
});