我想实现一个单独的ErrorHandler类,该类在某些事件上显示错误消息。该类的行为应从其他不同的类中调用。发生错误时,它将有一个UIAlertView
as输出。此AlertView的显示应始终位于顶部。因此,无论从何处引发错误,最顶层的viewController都应显示AlertMessage(例如,当异步后台进程失败时,无论在前台显示什么视图,我都将收到一条错误消息)。
我发现一些要点似乎可以解决我的问题(请参见下面的代码)。但是调用UIApplication.sharedApplication().keyWindow?.visibleViewController()
确实会返回nil值。
从主旨延伸
extension UIWindow {
func visibleViewController() -> UIViewController? {
if let rootViewController: UIViewController = self.rootViewController {
return UIWindow.getVisibleViewControllerFrom(rootViewController)
}
return nil
}
class func getVisibleViewControllerFrom(vc:UIViewController) -> UIViewController {
if vc.isKindOfClass(UINavigationController.self) {
let navigationController = vc as! UINavigationController
return UIWindow.getVisibleViewControllerFrom( navigationController.visibleViewController)
} else if vc.isKindOfClass(UITabBarController.self) {
let tabBarController = vc as! UITabBarController
return UIWindow.getVisibleViewControllerFrom(tabBarController.selectedViewController!)
} else {
if let presentedViewController = vc.presentedViewController {
return UIWindow.getVisibleViewControllerFrom(presentedViewController.presentedViewController!)
} else {
return vc;
}
}
}
}
Amit89提供了一种解决方案。您必须调用.window
AppDelegate
的属性。因此,我从下面的链接中更改了Swift代码,使其可以正常工作以找到最顶层的ViewController。确保该视图已经在视图层次结构中。因此,无法从.viewDidLoad
查找最顶层ViewController *的扩展
extension UIApplication {
class func topViewController(base: UIViewController? = (UIApplication.sharedApplication().delegate as! AppDelegate).window?.rootViewController) -> UIViewController? {
if let nav = base as? UINavigationController {
return topViewController(base: nav.visibleViewController)
}
if let tab = base as? UITabBarController {
if let selected = tab.selectedViewController {
return topViewController(base: selected)
}
}
if let presented = base?.presentedViewController {
return topViewController(base: presented)
}
return base
}
}
该代码源自GitHub用户Yonat,它是对ObjectiveC等效项的注释。我只更改了一些代码,以使其在没有该.keyWindow
属性的情况下也能正常工作
问题内容: 是否可以在Java的CardLayout中获得顶级卡片?我尝试遍历每个组件以使用isVisible()检查可见性,但似乎它们都是“可见的”。 编辑:“顶卡”是指当前显示在“顶卡”上的那张,而不是第一张或最后一张卡。另外,我不知道它是否有帮助,但我正在寻找一个JPanel(或其子类) 编辑:代码段 上面的代码总是打印出每个组件类的名称,无论它们是否是可见的卡片。 编辑 :我正在使用它作为
我只有java版本1.8.0_45()。所以,你建议的解决方案不能解决我的问题。 当我运行应用程序时,它会抛出以下错误: 意外的顶级异常:错误:com.android.dx.cf.iface。ParseException:com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)处的坏类文件magic(cafe
我想知道是否有一种简单的方法可以从特定的窗口获得所有的顶层,包括顶层内的顶层。在下面的代码中,我留下了一个我想做的例子: Tkinter中是否有实现这一点的内置功能?
我不清楚的概念 Java Thread 在进入实例同步 java 方法时获取对象级锁,在进入静态同步 Java 方法时获取类级锁。 当它表示对象级锁定和类级锁定时,它意味着什么? 例如: 这里的getCount()将锁定Counter.class对象,而setCount()将锁定当前对象(this)。这是什么意思?这是否意味着当getCount()被调用时,另一个线程不能访问setCount(),
我的问题类似于这个如何使用节点js获取谷歌云存储文件夹中的文件列表。 我只是想得到顶级的物体。我试着在这里跟随nodejs storage samples files.js,当我尝试“prefix”和“deliminator”的不同组合时,我很难获得顶级对象。我已尝试使用前缀“”和去污剂“/”。我尝试了前缀“/”和去污剂“/”。我尝试了一个前缀“/”没有除沫器。似乎并没有什么能让我只得到顶级对象的
假设我有以下文件: 我只想在搜索响应中获得与所有顶级字段匹配的嵌套对象。我的意思是,如果我搜索/筛选名为“abc”的用户,我希望下面的响应 我怎么能那么做? 参考:在elasticsearch中从数组中选择匹配的对象