Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [UIApplication sharedApplication].keyWindow.rootViewController;
- + (UIViewController*) topMostController
- {
- UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
- while (topController.presentedViewController) {
- topController = topController.presentedViewController;
- }
- return topController;
- }
- func topMostController() -> UIViewController? {
- guard let window = UIApplication.shared.keyWindow, let rootViewController = window.rootViewController else {
- return nil
- }
- var topController = rootViewController
- while let newTopController = topController.presentedViewController {
- topController = newTopController
- }
- return topController
- }
- - (UIViewController*)topViewController {
- return [self topViewControllerWithRootViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
- }
- - (UIViewController*)topViewControllerWithRootViewController:(UIViewController*)rootViewController {
- if ([rootViewController isKindOfClass:[UITabBarController class]]) {
- UITabBarController* tabBarController = (UITabBarController*)rootViewController;
- return [self topViewControllerWithRootViewController:tabBarController.selectedViewController];
- } else if ([rootViewController isKindOfClass:[UINavigationController class]]) {
- UINavigationController* navigationController = (UINavigationController*)rootViewController;
- return [self topViewControllerWithRootViewController:navigationController.visibleViewController];
- } else if (rootViewController.presentedViewController) {
- UIViewController* presentedViewController = rootViewController.presentedViewController;
- return [self topViewControllerWithRootViewController:presentedViewController];
- } else {
- return rootViewController;
- }
- }
- UIViewController *topViewController = self.window.rootViewController;
- while (true)
- {
- if (topViewController.presentedViewController) {
- topViewController = topViewController.presentedViewController;
- } else if ([topViewController isKindOfClass:[UINavigationController class]]) {
- UINavigationController *nav = (UINavigationController *)topViewController;
- topViewController = nav.topViewController;
- } else if ([topViewController isKindOfClass:[UITabBarController class]]) {
- UITabBarController *tab = (UITabBarController *)topViewController;
- topViewController = tab.selectedViewController;
- } else {
- break;
- }
- }
- extension UIWindow {
- func topViewController() -> UIViewController? {
- var top = self.rootViewController
- while true {
- if let presented = top?.presentedViewController {
- top = presented
- } else if let nav = top as? UINavigationController {
- top = nav.visibleViewController
- } else if let tab = top as? UITabBarController {
- top = tab.selectedViewController
- } else {
- break
- }
- }
- return top
- }
- }
- extension UIViewController {
- @objc func topMostViewController() -> UIViewController {
- // Handling Modal views
- if let presentedViewController = self.presentedViewController {
- return presentedViewController.topMostViewController()
- }
- // Handling UIViewController's added as subviews to some other views.
- else {
- for view in self.view.subviews
- {
- // Key property which most of us are unaware of / rarely use.
- if let subViewController = view.next {
- if subViewController is UIViewController {
- let viewController = subViewController as! UIViewController
- return viewController.topMostViewController()
- }
- }
- }
- return self
- }
- }
- }
- extension UITabBarController {
- override func topMostViewController() -> UIViewController {
- return self.selectedViewController!.topMostViewController()
- }
- }
- extension UINavigationController {
- override func topMostViewController() -> UIViewController {
- return self.visibleViewController!.topMostViewController()
- }
- }
- UIApplication.sharedApplication().keyWindow!.rootViewController!.topMostViewController()
- - (UIViewController*)topViewController {
- return [self topViewControllerWithRootViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
- }
- - (UIViewController*)topViewControllerWithRootViewController:(UIViewController*)viewController {
- if ([viewController isKindOfClass:[UITabBarController class]]) {
- UITabBarController* tabBarController = (UITabBarController*)viewController;
- return [self topViewControllerWithRootViewController:tabBarController.selectedViewController];
- } else if ([viewController isKindOfClass:[UINavigationController class]]) {
- UINavigationController* navContObj = (UINavigationController*)viewController;
- return [self topViewControllerWithRootViewController:navContObj.visibleViewController];
- } else if (viewController.presentedViewController && !viewController.presentedViewController.isBeingDismissed) {
- UIViewController* presentedViewController = viewController.presentedViewController;
- return [self topViewControllerWithRootViewController:presentedViewController];
- }
- else {
- for (UIView *view in [viewController.view subviews])
- {
- id subViewController = [view nextResponder];
- if ( subViewController && [subViewController isKindOfClass:[UIViewController class]])
- {
- if ([(UIViewController *)subViewController presentedViewController] && ![subViewController presentedViewController].isBeingDismissed) {
- return [self topViewControllerWithRootViewController:[(UIViewController *)subViewController presentedViewController]];
- }
- }
- }
- return viewController;
- }
- }
- UIViewController *topMostViewControllerObj = [self topViewController];
- + (UIViewController *)topViewController
- {
- UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
- return [rootViewController topVisibleViewController];
- }
- - (UIViewController *)topVisibleViewController
- {
- if ([self isKindOfClass:[UITabBarController class]])
- {
- UITabBarController *tabBarController = (UITabBarController *)self;
- return [tabBarController.selectedViewController topVisibleViewController];
- }
- else if ([self isKindOfClass:[UINavigationController class]])
- {
- UINavigationController *navigationController = (UINavigationController *)self;
- return [navigationController.visibleViewController topVisibleViewController];
- }
- else if (self.presentedViewController)
- {
- return [self.presentedViewController topVisibleViewController];
- }
- else if (self.childViewControllers.count > 0)
- {
- return [self.childViewControllers.lastObject topVisibleViewController];
- }
- return self;
- }
- UIViewController *c = [UIViewController topMostController];
- UIViewController *_topMostController(UIViewController *cont) {
- UIViewController *topController = cont;
- while (topController.presentedViewController) {
- topController = topController.presentedViewController;
- }
- if ([topController isKindOfClass:[UINavigationController class]]) {
- UIViewController *visible = ((UINavigationController *)topController).visibleViewController;
- if (visible) {
- topController = visible;
- }
- }
- return (topController != cont ? topController : nil);
- }
- UIViewController *topMostController() {
- UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
- UIViewController *next = nil;
- while ((next = _topMostController(topController)) != nil) {
- topController = next;
- }
- return topController;
- }
- - (UIViewController*)topViewController {
- return [self topViewControllerWithRootViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
- }
- - (UIViewController*)topViewControllerWithRootViewController:(UIViewController*)rootViewController {
- if ([rootViewController isKindOfClass:[UITabBarController class]]) {
- UITabBarController* tabBarController = (UITabBarController*)rootViewController;
- return [self topViewControllerWithRootViewController:tabBarController.selectedViewController];
- } else if ([rootViewController isKindOfClass:[UINavigationController class]]) {
- UINavigationController* navigationController = (UINavigationController*)rootViewController;
- return [self topViewControllerWithRootViewController:navigationController.visibleViewController];
- } else if (rootViewController.presentedViewController) {
- UIViewController* presentedViewController = rootViewController.presentedViewController;
- return [self topViewControllerWithRootViewController:presentedViewController];
- } else {
- return rootViewController;
- }
- }
- extension UIApplication {
- class func topViewController(baseViewController: UIViewController? = UIApplication.sharedApplication().keyWindow?.rootViewController) -> UIViewController? {
- if let navigationController = baseViewController as? UINavigationController {
- return topViewController(navigationController.visibleViewController)
- }
- if let tabBarViewController = baseViewController as? UITabBarController {
- let moreNavigationController = tabBarViewController.moreNavigationController
- if let topViewController = moreNavigationController.topViewController where topViewController.view.window != nil {
- return topViewController(topViewController)
- } else if let selectedViewController = tabBarViewController.selectedViewController {
- return topViewController(selectedViewController)
- }
- }
- if let splitViewController = baseViewController as? UISplitViewController where splitViewController.viewControllers.count == 1 {
- return topViewController(splitViewController.viewControllers[0])
- }
- if let presentedViewController = baseViewController?.presentedViewController {
- return topViewController(presentedViewController)
- }
- return baseViewController
- }
- }
- if let topViewController = UIApplication.topViewController() {
- //do sth with top view controller
- }
- -(UIWindow *) returnWindowWithWindowLevelNormal
- {
- NSArray *windows = [UIApplication sharedApplication].windows;
- for(UIWindow *topWindow in windows)
- {
- if (topWindow.windowLevel == UIWindowLevelNormal)
- return topWindow;
- }
- return [UIApplication sharedApplication].keyWindow;
- }
- -(UIViewController *) getTopMostController
- {
- UIWindow *topWindow = [UIApplication sharedApplication].keyWindow;
- if (topWindow.windowLevel != UIWindowLevelNormal)
- {
- topWindow = [self returnWindowWithWindowLevelNormal];
- }
- UIViewController *topController = topWindow.rootViewController;
- if(topController == nil)
- {
- topWindow = [UIApplication sharedApplication].delegate.window;
- if (topWindow.windowLevel != UIWindowLevelNormal)
- {
- topWindow = [self returnWindowWithWindowLevelNormal];
- }
- topController = topWindow.rootViewController;
- }
- while(topController.presentedViewController)
- {
- topController = topController.presentedViewController;
- }
- if([topController isKindOfClass:[UINavigationController class]])
- {
- UINavigationController *nav = (UINavigationController*)topController;
- topController = [nav.viewControllers lastObject];
- while(topController.presentedViewController)
- {
- topController = topController.presentedViewController;
- }
- }
- return topController;
- }
- -(UIWindow *) returnWindowWithWindowLevelNormal
- {
- NSArray *windows = [UIApplication sharedApplication].windows;
- for(UIWindow *topWindow in windows)
- {
- if (topWindow.windowLevel == UIWindowLevelNormal)
- return topWindow;
- }
- return [UIApplication sharedApplication].keyWindow;
- }
- -(UIViewController *) getTopMostController
- {
- UIWindow *topWindow = [UIApplication sharedApplication].keyWindow;
- if (topWindow.windowLevel != UIWindowLevelNormal)
- {
- topWindow = [self returnWindowWithWindowLevelNormal];
- }
- UIViewController *topController = topWindow.rootViewController;
- if(topController == nil)
- {
- topWindow = [UIApplication sharedApplication].delegate.window;
- if (topWindow.windowLevel != UIWindowLevelNormal)
- {
- topWindow = [self returnWindowWithWindowLevelNormal];
- }
- topController = topWindow.rootViewController;
- }
- while(topController.presentedViewController)
- {
- topController = topController.presentedViewController;
- }
- if([topController isKindOfClass:[UINavigationController class]])
- {
- UINavigationController *nav = (UINavigationController*)topController;
- topController = [nav.viewControllers lastObject];
- while(topController.presentedViewController)
- {
- topController = topController.presentedViewController;
- }
- }
- return topController;
- }
- import UIKit
- public extension UIWindow {
- public var visibleViewController: UIViewController? {
- return UIWindow.getVisibleViewControllerFrom(self.rootViewController)
- }
- public static func getVisibleViewControllerFrom(vc: UIViewController?) -> UIViewController? {
- if let nc = vc as? UINavigationController {
- return UIWindow.getVisibleViewControllerFrom(nc.visibleViewController)
- } else if let tc = vc as? UITabBarController {
- return UIWindow.getVisibleViewControllerFrom(tc.selectedViewController)
- } else {
- if let pvc = vc?.presentedViewController {
- return UIWindow.getVisibleViewControllerFrom(pvc)
- } else {
- return vc
- }
- }
- }
- }
- func getTopViewController() -> UIViewController? {
- let appDelegate = UIApplication.sharedApplication().delegate
- if let window = appDelegate!.window {
- return window?.visibleViewController
- }
- return nil
- }
- if let topVC = getTopViewController() {
- }
- + (UIViewController*)topMostController
- {
- UIWindow *topWndow = [UIApplication sharedApplication].keyWindow;
- UIViewController *topController = topWndow.rootViewController;
- if (topController == nil)
- {
- // The windows in the array are ordered from back to front by window level; thus,
- // the last window in the array is on top of all other app windows.
- for (UIWindow *aWndow in [[UIApplication sharedApplication].windows reverseObjectEnumerator])
- {
- topController = aWndow.rootViewController;
- if (topController)
- break;
- }
- }
- while (topController.presentedViewController) {
- topController = topController.presentedViewController;
- }
- return topController;
- }
- - (UIViewController *)getTopMostViewController {
- UIWindow *topWindow = [UIApplication sharedApplication].keyWindow;
- if (topWindow.windowLevel != UIWindowLevelNormal) {
- NSArray *windows = [UIApplication sharedApplication].windows;
- for(topWindow in windows)
- {
- if (topWindow.windowLevel == UIWindowLevelNormal)
- break;
- }
- }
- UIViewController *topViewController = topWindow.rootViewController;
- while (topViewController.presentedViewController) {
- topViewController = topViewController.presentedViewController;
- }
- return topViewController;
- }
- static func topMostController() -> UIViewController {
- var topController = UIApplication.sharedApplication().keyWindow?.rootViewController
- while (topController?.presentedViewController != nil) {
- topController = topController?.presentedViewController
- }
- return topController!
- }
- func topController() -> UIViewController? {
- // recursive follow
- func follow(from:UIViewController?) -> UIViewController? {
- if let to = (from as? UITabBarController)?.selectedViewController {
- return follow(to)
- } else if let to = (from as? UINavigationController)?.visibleViewController {
- return follow(to)
- } else if let to = from?.presentedViewController {
- return follow(to)
- }
- return from
- }
- let root = UIApplication.sharedApplication().keyWindow?.rootViewController
- return follow(root)
- }
- //Get the topmost view controller for the current application.
- public func MGGetTopMostViewController() -> UIViewController? {
- if let currentWindow:UIWindow = UIApplication.shared.keyWindow {
- return MGGetTopMostViewController(fromWindow: currentWindow)
- }
- return nil
- }
- //Gets the topmost view controller from a specific window.
- public func MGGetTopMostViewController(fromWindow window:UIWindow) -> UIViewController? {
- if let rootViewController:UIViewController = window.rootViewController
- {
- return MGGetTopMostViewController(fromViewController: rootViewController)
- }
- return nil
- }
- //Gets the topmost view controller starting from a specific UIViewController
- //Pass the rootViewController into this to get the apps top most view controller
- public func MGGetTopMostViewController(fromViewController viewController:UIViewController) -> UIViewController {
- //UINavigationController
- if let navigationViewController:UINavigationController = viewController as? UINavigationController {
- let viewControllers:[UIViewController] = navigationViewController.viewControllers
- if navigationViewController.viewControllers.count >= 1 {
- return MGGetTopMostViewController(fromViewController: viewControllers[viewControllers.count - 1])
- }
- }
- //UIPageViewController
- if let pageViewController:UIPageViewController = viewController as? UIPageViewController {
- if let viewControllers:[UIViewController] = pageViewController.viewControllers {
- if viewControllers.count >= 1 {
- return MGGetTopMostViewController(fromViewController: viewControllers[0])
- }
- }
- }
- //UITabViewController
- if let tabBarController:UITabBarController = viewController as? UITabBarController {
- if let selectedViewController:UIViewController = tabBarController.selectedViewController {
- return MGGetTopMostViewController(fromViewController: selectedViewController)
- }
- }
- //Lastly, Attempt to get the topmost presented view controller
- var presentedViewController:UIViewController! = viewController.presentedViewController
- var nextPresentedViewController:UIViewController! = presentedViewController?.presentedViewController
- //If there is a presented view controller, get the top most prensentedViewController and return it.
- if presentedViewController != nil {
- while nextPresentedViewController != nil {
- //Set the presented view controller as the next one.
- presentedViewController = nextPresentedViewController
- //Attempt to get the next presented view controller
- nextPresentedViewController = presentedViewController.presentedViewController
- }
- return presentedViewController
- }
- //If there is no topmost presented view controller, return the view controller itself.
- return viewController
- }
- func getTopViewController()->UIViewController{
- return topViewControllerWithRootViewController(UIApplication.sharedApplication().keyWindow!.rootViewController!)
- }
- func topViewControllerWithRootViewController(rootViewController:UIViewController)->UIViewController{
- if rootViewController is UITabBarController{
- let tabBarController = rootViewController as! UITabBarController
- return topViewControllerWithRootViewController(tabBarController.selectedViewController!)
- }
- if rootViewController is UINavigationController{
- let navBarController = rootViewController as! UINavigationController
- return topViewControllerWithRootViewController(navBarController.visibleViewController)
- }
- if let presentedViewController = rootViewController.presentedViewController {
- return topViewControllerWithRootViewController(presentedViewController)
- }
- return rootViewController
- }
- + (UIViewController *)topMostController {
- UIViewController * topController = [UIApplication sharedApplication].keyWindow.rootViewController;
- while (topController.presentedViewController || [topController isMemberOfClass:[UINavigationController class]]) {
- if([topController isMemberOfClass:[UINavigationController class]]) {
- topController = [topController childViewControllers].lastObject;
- } else {
- topController = topController.presentedViewController;
- }
- }
- return topController;
- }
- extension UIApplication {
- class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
- if let navigationController = controller as? UINavigationController {
- return topViewController(controller: navigationController.visibleViewController)
- }
- if let tabController = controller as? UITabBarController {
- if let selected = tabController.selectedViewController {
- return topViewController(controller: selected)
- }
- }
- if let presented = controller?.presentedViewController {
- return topViewController(controller: presented)
- }
- return controller
- }
- }
- UIApplication.topViewController()?.present(yourController, animated: true, completion: nil)
- UIApplication.topViewController()?
- .navigationController?
- .popToViewController(yourController,
- animated: true)
- UIViewController* parentController =[UIApplication sharedApplication].keyWindow.rootViewController;
- while( parentController.presentedViewController &&
- parentController != parentController.presentedViewController )
- {
- parentController = parentController.presentedViewController;
- }
- 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;
- }
- }
- }
- if let topController = window.visibleViewController() {
- println(topController)
- }
- - (UIViewController*)findTopViewController {
- id topControler = [self topMostController];
- UIViewController* topViewController;
- if([topControler isKindOfClass:[UINavigationController class]]) {
- topViewController = [[(UINavigationController*)topControler viewControllers] lastObject];
- } else if ([topControler isKindOfClass:[UITabBarController class]]) {
- //Here you can get reference of top viewcontroller from stack of viewcontrollers on UITabBarController
- } else {
- //topController is a preented viewController
- topViewController = (UIViewController*)topControler;
- }
- //NSLog(@"Top ViewController is: %@",NSStringFromClass([topController class]));
- return topViewController;
- }
- - (UIViewController*)topMostController
- {
- UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
- while (topController.presentedViewController) {
- topController = topController.presentedViewController;
- }
- //NSLog(@"Top View is: %@",NSStringFromClass([topController class]));
- return topController;
- }
- extension UIViewController {
- static var topmostViewController: UIViewController? {
- return UIApplication.sharedApplication().keyWindow?.topmostViewController
- }
- var topmostViewController: UIViewController? {
- return presentedViewController?.topmostViewController ?? self
- }
- }
- extension UINavigationController {
- override var topmostViewController: UIViewController? {
- return visibleViewController?.topmostViewController
- }
- }
- extension UITabBarController {
- override var topmostViewController: UIViewController? {
- return selectedViewController?.topmostViewController
- }
- }
- extension UIWindow {
- var topmostViewController: UIViewController? {
- return rootViewController?.topmostViewController
- }
- }
- UIViewController *rootVC = [[UIApplication sharedApplication] keyWindow].rootViewController;
- if ([rootVC respondsToSelector:@selector(visibleViewController)])
- {
- UIViewController *topVC = [(UINavigationController *)rootVC visibleViewController];
- // do your thing with topVC
- }
- @property(nonatomic,readonly,retain) UIViewController *topViewController; // The top view controller on the stack.
- @property(nonatomic,readonly,retain) UIViewController *visibleViewController; // Return modal view controller if it exists. Otherwise the top view controller.
- + (UIViewController *)topViewControllerFor:(UIViewController *)viewController
- {
- if(!viewController.presentedViewController)
- return viewController;
- return [MF5AppDelegate topViewControllerFor:viewController.presentedViewController];
- }
- /* View Controller for Visible View */
- AppDelegate *app = [UIApplication sharedApplication].delegate;
- UIViewController *visibleViewController = [AppDelegate topViewControllerFor:app.window.rootViewController];
- NSArray *arrViewControllers=[[self navigationController] viewControllers];
- UIViewController *topMostViewController=(UIViewController *)[arrViewControllers objectAtIndex:[arrViewControllers count]-1];
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement