Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.51 KB | None | 0 0
  1. [UIApplication sharedApplication].keyWindow.rootViewController;
  2.  
  3. + (UIViewController*) topMostController
  4. {
  5. UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
  6.  
  7. while (topController.presentedViewController) {
  8. topController = topController.presentedViewController;
  9. }
  10.  
  11. return topController;
  12. }
  13.  
  14. func topMostController() -> UIViewController? {
  15. guard let window = UIApplication.shared.keyWindow, let rootViewController = window.rootViewController else {
  16. return nil
  17. }
  18.  
  19. var topController = rootViewController
  20.  
  21. while let newTopController = topController.presentedViewController {
  22. topController = newTopController
  23. }
  24.  
  25. return topController
  26. }
  27.  
  28. - (UIViewController*)topViewController {
  29. return [self topViewControllerWithRootViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
  30. }
  31.  
  32. - (UIViewController*)topViewControllerWithRootViewController:(UIViewController*)rootViewController {
  33. if ([rootViewController isKindOfClass:[UITabBarController class]]) {
  34. UITabBarController* tabBarController = (UITabBarController*)rootViewController;
  35. return [self topViewControllerWithRootViewController:tabBarController.selectedViewController];
  36. } else if ([rootViewController isKindOfClass:[UINavigationController class]]) {
  37. UINavigationController* navigationController = (UINavigationController*)rootViewController;
  38. return [self topViewControllerWithRootViewController:navigationController.visibleViewController];
  39. } else if (rootViewController.presentedViewController) {
  40. UIViewController* presentedViewController = rootViewController.presentedViewController;
  41. return [self topViewControllerWithRootViewController:presentedViewController];
  42. } else {
  43. return rootViewController;
  44. }
  45. }
  46.  
  47. UIViewController *topViewController = self.window.rootViewController;
  48. while (true)
  49. {
  50. if (topViewController.presentedViewController) {
  51. topViewController = topViewController.presentedViewController;
  52. } else if ([topViewController isKindOfClass:[UINavigationController class]]) {
  53. UINavigationController *nav = (UINavigationController *)topViewController;
  54. topViewController = nav.topViewController;
  55. } else if ([topViewController isKindOfClass:[UITabBarController class]]) {
  56. UITabBarController *tab = (UITabBarController *)topViewController;
  57. topViewController = tab.selectedViewController;
  58. } else {
  59. break;
  60. }
  61. }
  62.  
  63. extension UIWindow {
  64. func topViewController() -> UIViewController? {
  65. var top = self.rootViewController
  66. while true {
  67. if let presented = top?.presentedViewController {
  68. top = presented
  69. } else if let nav = top as? UINavigationController {
  70. top = nav.visibleViewController
  71. } else if let tab = top as? UITabBarController {
  72. top = tab.selectedViewController
  73. } else {
  74. break
  75. }
  76. }
  77. return top
  78. }
  79. }
  80.  
  81. extension UIViewController {
  82. @objc func topMostViewController() -> UIViewController {
  83. // Handling Modal views
  84. if let presentedViewController = self.presentedViewController {
  85. return presentedViewController.topMostViewController()
  86. }
  87. // Handling UIViewController's added as subviews to some other views.
  88. else {
  89. for view in self.view.subviews
  90. {
  91. // Key property which most of us are unaware of / rarely use.
  92. if let subViewController = view.next {
  93. if subViewController is UIViewController {
  94. let viewController = subViewController as! UIViewController
  95. return viewController.topMostViewController()
  96. }
  97. }
  98. }
  99. return self
  100. }
  101. }
  102. }
  103.  
  104. extension UITabBarController {
  105. override func topMostViewController() -> UIViewController {
  106. return self.selectedViewController!.topMostViewController()
  107. }
  108. }
  109.  
  110. extension UINavigationController {
  111. override func topMostViewController() -> UIViewController {
  112. return self.visibleViewController!.topMostViewController()
  113. }
  114. }
  115.  
  116. UIApplication.sharedApplication().keyWindow!.rootViewController!.topMostViewController()
  117.  
  118. - (UIViewController*)topViewController {
  119. return [self topViewControllerWithRootViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
  120. }
  121.  
  122. - (UIViewController*)topViewControllerWithRootViewController:(UIViewController*)viewController {
  123. if ([viewController isKindOfClass:[UITabBarController class]]) {
  124. UITabBarController* tabBarController = (UITabBarController*)viewController;
  125. return [self topViewControllerWithRootViewController:tabBarController.selectedViewController];
  126. } else if ([viewController isKindOfClass:[UINavigationController class]]) {
  127. UINavigationController* navContObj = (UINavigationController*)viewController;
  128. return [self topViewControllerWithRootViewController:navContObj.visibleViewController];
  129. } else if (viewController.presentedViewController && !viewController.presentedViewController.isBeingDismissed) {
  130. UIViewController* presentedViewController = viewController.presentedViewController;
  131. return [self topViewControllerWithRootViewController:presentedViewController];
  132. }
  133. else {
  134. for (UIView *view in [viewController.view subviews])
  135. {
  136. id subViewController = [view nextResponder];
  137. if ( subViewController && [subViewController isKindOfClass:[UIViewController class]])
  138. {
  139. if ([(UIViewController *)subViewController presentedViewController] && ![subViewController presentedViewController].isBeingDismissed) {
  140. return [self topViewControllerWithRootViewController:[(UIViewController *)subViewController presentedViewController]];
  141. }
  142. }
  143. }
  144. return viewController;
  145. }
  146. }
  147.  
  148. UIViewController *topMostViewControllerObj = [self topViewController];
  149.  
  150. + (UIViewController *)topViewController
  151. {
  152. UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
  153.  
  154. return [rootViewController topVisibleViewController];
  155. }
  156.  
  157. - (UIViewController *)topVisibleViewController
  158. {
  159. if ([self isKindOfClass:[UITabBarController class]])
  160. {
  161. UITabBarController *tabBarController = (UITabBarController *)self;
  162. return [tabBarController.selectedViewController topVisibleViewController];
  163. }
  164. else if ([self isKindOfClass:[UINavigationController class]])
  165. {
  166. UINavigationController *navigationController = (UINavigationController *)self;
  167. return [navigationController.visibleViewController topVisibleViewController];
  168. }
  169. else if (self.presentedViewController)
  170. {
  171. return [self.presentedViewController topVisibleViewController];
  172. }
  173. else if (self.childViewControllers.count > 0)
  174. {
  175. return [self.childViewControllers.lastObject topVisibleViewController];
  176. }
  177.  
  178. return self;
  179. }
  180.  
  181. UIViewController *c = [UIViewController topMostController];
  182.  
  183. UIViewController *_topMostController(UIViewController *cont) {
  184. UIViewController *topController = cont;
  185.  
  186. while (topController.presentedViewController) {
  187. topController = topController.presentedViewController;
  188. }
  189.  
  190. if ([topController isKindOfClass:[UINavigationController class]]) {
  191. UIViewController *visible = ((UINavigationController *)topController).visibleViewController;
  192. if (visible) {
  193. topController = visible;
  194. }
  195. }
  196.  
  197. return (topController != cont ? topController : nil);
  198. }
  199.  
  200. UIViewController *topMostController() {
  201. UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
  202.  
  203. UIViewController *next = nil;
  204.  
  205. while ((next = _topMostController(topController)) != nil) {
  206. topController = next;
  207. }
  208.  
  209. return topController;
  210. }
  211.  
  212. - (UIViewController*)topViewController {
  213. return [self topViewControllerWithRootViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
  214. }
  215.  
  216. - (UIViewController*)topViewControllerWithRootViewController:(UIViewController*)rootViewController {
  217. if ([rootViewController isKindOfClass:[UITabBarController class]]) {
  218. UITabBarController* tabBarController = (UITabBarController*)rootViewController;
  219. return [self topViewControllerWithRootViewController:tabBarController.selectedViewController];
  220. } else if ([rootViewController isKindOfClass:[UINavigationController class]]) {
  221. UINavigationController* navigationController = (UINavigationController*)rootViewController;
  222. return [self topViewControllerWithRootViewController:navigationController.visibleViewController];
  223. } else if (rootViewController.presentedViewController) {
  224. UIViewController* presentedViewController = rootViewController.presentedViewController;
  225. return [self topViewControllerWithRootViewController:presentedViewController];
  226. } else {
  227. return rootViewController;
  228. }
  229. }
  230.  
  231. extension UIApplication {
  232.  
  233. class func topViewController(baseViewController: UIViewController? = UIApplication.sharedApplication().keyWindow?.rootViewController) -> UIViewController? {
  234.  
  235. if let navigationController = baseViewController as? UINavigationController {
  236. return topViewController(navigationController.visibleViewController)
  237. }
  238.  
  239. if let tabBarViewController = baseViewController as? UITabBarController {
  240.  
  241. let moreNavigationController = tabBarViewController.moreNavigationController
  242.  
  243. if let topViewController = moreNavigationController.topViewController where topViewController.view.window != nil {
  244. return topViewController(topViewController)
  245. } else if let selectedViewController = tabBarViewController.selectedViewController {
  246. return topViewController(selectedViewController)
  247. }
  248. }
  249.  
  250. if let splitViewController = baseViewController as? UISplitViewController where splitViewController.viewControllers.count == 1 {
  251. return topViewController(splitViewController.viewControllers[0])
  252. }
  253.  
  254. if let presentedViewController = baseViewController?.presentedViewController {
  255. return topViewController(presentedViewController)
  256. }
  257.  
  258. return baseViewController
  259. }
  260. }
  261.  
  262. if let topViewController = UIApplication.topViewController() {
  263. //do sth with top view controller
  264. }
  265.  
  266. -(UIWindow *) returnWindowWithWindowLevelNormal
  267. {
  268. NSArray *windows = [UIApplication sharedApplication].windows;
  269. for(UIWindow *topWindow in windows)
  270. {
  271. if (topWindow.windowLevel == UIWindowLevelNormal)
  272. return topWindow;
  273. }
  274. return [UIApplication sharedApplication].keyWindow;
  275. }
  276.  
  277. -(UIViewController *) getTopMostController
  278. {
  279. UIWindow *topWindow = [UIApplication sharedApplication].keyWindow;
  280. if (topWindow.windowLevel != UIWindowLevelNormal)
  281. {
  282. topWindow = [self returnWindowWithWindowLevelNormal];
  283. }
  284.  
  285. UIViewController *topController = topWindow.rootViewController;
  286. if(topController == nil)
  287. {
  288. topWindow = [UIApplication sharedApplication].delegate.window;
  289. if (topWindow.windowLevel != UIWindowLevelNormal)
  290. {
  291. topWindow = [self returnWindowWithWindowLevelNormal];
  292. }
  293. topController = topWindow.rootViewController;
  294. }
  295.  
  296. while(topController.presentedViewController)
  297. {
  298. topController = topController.presentedViewController;
  299. }
  300.  
  301. if([topController isKindOfClass:[UINavigationController class]])
  302. {
  303. UINavigationController *nav = (UINavigationController*)topController;
  304. topController = [nav.viewControllers lastObject];
  305.  
  306. while(topController.presentedViewController)
  307. {
  308. topController = topController.presentedViewController;
  309. }
  310. }
  311.  
  312. return topController;
  313. }
  314.  
  315. -(UIWindow *) returnWindowWithWindowLevelNormal
  316. {
  317. NSArray *windows = [UIApplication sharedApplication].windows;
  318. for(UIWindow *topWindow in windows)
  319. {
  320. if (topWindow.windowLevel == UIWindowLevelNormal)
  321. return topWindow;
  322. }
  323. return [UIApplication sharedApplication].keyWindow;
  324. }
  325.  
  326. -(UIViewController *) getTopMostController
  327. {
  328. UIWindow *topWindow = [UIApplication sharedApplication].keyWindow;
  329. if (topWindow.windowLevel != UIWindowLevelNormal)
  330. {
  331. topWindow = [self returnWindowWithWindowLevelNormal];
  332. }
  333.  
  334. UIViewController *topController = topWindow.rootViewController;
  335. if(topController == nil)
  336. {
  337. topWindow = [UIApplication sharedApplication].delegate.window;
  338. if (topWindow.windowLevel != UIWindowLevelNormal)
  339. {
  340. topWindow = [self returnWindowWithWindowLevelNormal];
  341. }
  342. topController = topWindow.rootViewController;
  343. }
  344.  
  345. while(topController.presentedViewController)
  346. {
  347. topController = topController.presentedViewController;
  348. }
  349.  
  350. if([topController isKindOfClass:[UINavigationController class]])
  351. {
  352. UINavigationController *nav = (UINavigationController*)topController;
  353. topController = [nav.viewControllers lastObject];
  354.  
  355. while(topController.presentedViewController)
  356. {
  357. topController = topController.presentedViewController;
  358. }
  359. }
  360.  
  361. return topController;
  362. }
  363.  
  364. import UIKit
  365.  
  366. public extension UIWindow {
  367. public var visibleViewController: UIViewController? {
  368. return UIWindow.getVisibleViewControllerFrom(self.rootViewController)
  369. }
  370.  
  371. public static func getVisibleViewControllerFrom(vc: UIViewController?) -> UIViewController? {
  372. if let nc = vc as? UINavigationController {
  373. return UIWindow.getVisibleViewControllerFrom(nc.visibleViewController)
  374. } else if let tc = vc as? UITabBarController {
  375. return UIWindow.getVisibleViewControllerFrom(tc.selectedViewController)
  376. } else {
  377. if let pvc = vc?.presentedViewController {
  378. return UIWindow.getVisibleViewControllerFrom(pvc)
  379. } else {
  380. return vc
  381. }
  382. }
  383. }
  384. }
  385.  
  386. func getTopViewController() -> UIViewController? {
  387. let appDelegate = UIApplication.sharedApplication().delegate
  388. if let window = appDelegate!.window {
  389. return window?.visibleViewController
  390. }
  391. return nil
  392. }
  393.  
  394. if let topVC = getTopViewController() {
  395.  
  396. }
  397.  
  398. + (UIViewController*)topMostController
  399. {
  400. UIWindow *topWndow = [UIApplication sharedApplication].keyWindow;
  401. UIViewController *topController = topWndow.rootViewController;
  402.  
  403. if (topController == nil)
  404. {
  405. // The windows in the array are ordered from back to front by window level; thus,
  406. // the last window in the array is on top of all other app windows.
  407. for (UIWindow *aWndow in [[UIApplication sharedApplication].windows reverseObjectEnumerator])
  408. {
  409. topController = aWndow.rootViewController;
  410. if (topController)
  411. break;
  412. }
  413. }
  414.  
  415. while (topController.presentedViewController) {
  416. topController = topController.presentedViewController;
  417. }
  418.  
  419. return topController;
  420. }
  421.  
  422. - (UIViewController *)getTopMostViewController {
  423. UIWindow *topWindow = [UIApplication sharedApplication].keyWindow;
  424. if (topWindow.windowLevel != UIWindowLevelNormal) {
  425. NSArray *windows = [UIApplication sharedApplication].windows;
  426. for(topWindow in windows)
  427. {
  428. if (topWindow.windowLevel == UIWindowLevelNormal)
  429. break;
  430. }
  431. }
  432.  
  433. UIViewController *topViewController = topWindow.rootViewController;
  434.  
  435. while (topViewController.presentedViewController) {
  436. topViewController = topViewController.presentedViewController;
  437. }
  438.  
  439. return topViewController;
  440. }
  441.  
  442. static func topMostController() -> UIViewController {
  443. var topController = UIApplication.sharedApplication().keyWindow?.rootViewController
  444. while (topController?.presentedViewController != nil) {
  445. topController = topController?.presentedViewController
  446. }
  447.  
  448. return topController!
  449. }
  450.  
  451. func topController() -> UIViewController? {
  452.  
  453. // recursive follow
  454. func follow(from:UIViewController?) -> UIViewController? {
  455. if let to = (from as? UITabBarController)?.selectedViewController {
  456. return follow(to)
  457. } else if let to = (from as? UINavigationController)?.visibleViewController {
  458. return follow(to)
  459. } else if let to = from?.presentedViewController {
  460. return follow(to)
  461. }
  462. return from
  463. }
  464.  
  465. let root = UIApplication.sharedApplication().keyWindow?.rootViewController
  466.  
  467. return follow(root)
  468.  
  469. }
  470.  
  471. //Get the topmost view controller for the current application.
  472. public func MGGetTopMostViewController() -> UIViewController? {
  473.  
  474. if let currentWindow:UIWindow = UIApplication.shared.keyWindow {
  475. return MGGetTopMostViewController(fromWindow: currentWindow)
  476. }
  477.  
  478. return nil
  479. }
  480.  
  481. //Gets the topmost view controller from a specific window.
  482. public func MGGetTopMostViewController(fromWindow window:UIWindow) -> UIViewController? {
  483.  
  484. if let rootViewController:UIViewController = window.rootViewController
  485. {
  486. return MGGetTopMostViewController(fromViewController: rootViewController)
  487. }
  488.  
  489. return nil
  490. }
  491.  
  492.  
  493. //Gets the topmost view controller starting from a specific UIViewController
  494. //Pass the rootViewController into this to get the apps top most view controller
  495. public func MGGetTopMostViewController(fromViewController viewController:UIViewController) -> UIViewController {
  496.  
  497. //UINavigationController
  498. if let navigationViewController:UINavigationController = viewController as? UINavigationController {
  499. let viewControllers:[UIViewController] = navigationViewController.viewControllers
  500. if navigationViewController.viewControllers.count >= 1 {
  501. return MGGetTopMostViewController(fromViewController: viewControllers[viewControllers.count - 1])
  502. }
  503. }
  504.  
  505. //UIPageViewController
  506. if let pageViewController:UIPageViewController = viewController as? UIPageViewController {
  507. if let viewControllers:[UIViewController] = pageViewController.viewControllers {
  508. if viewControllers.count >= 1 {
  509. return MGGetTopMostViewController(fromViewController: viewControllers[0])
  510. }
  511. }
  512. }
  513.  
  514. //UITabViewController
  515. if let tabBarController:UITabBarController = viewController as? UITabBarController {
  516. if let selectedViewController:UIViewController = tabBarController.selectedViewController {
  517. return MGGetTopMostViewController(fromViewController: selectedViewController)
  518. }
  519. }
  520.  
  521. //Lastly, Attempt to get the topmost presented view controller
  522. var presentedViewController:UIViewController! = viewController.presentedViewController
  523. var nextPresentedViewController:UIViewController! = presentedViewController?.presentedViewController
  524.  
  525. //If there is a presented view controller, get the top most prensentedViewController and return it.
  526. if presentedViewController != nil {
  527. while nextPresentedViewController != nil {
  528.  
  529. //Set the presented view controller as the next one.
  530. presentedViewController = nextPresentedViewController
  531.  
  532. //Attempt to get the next presented view controller
  533. nextPresentedViewController = presentedViewController.presentedViewController
  534. }
  535. return presentedViewController
  536. }
  537.  
  538. //If there is no topmost presented view controller, return the view controller itself.
  539. return viewController
  540. }
  541.  
  542. func getTopViewController()->UIViewController{
  543. return topViewControllerWithRootViewController(UIApplication.sharedApplication().keyWindow!.rootViewController!)
  544. }
  545. func topViewControllerWithRootViewController(rootViewController:UIViewController)->UIViewController{
  546. if rootViewController is UITabBarController{
  547. let tabBarController = rootViewController as! UITabBarController
  548. return topViewControllerWithRootViewController(tabBarController.selectedViewController!)
  549. }
  550. if rootViewController is UINavigationController{
  551. let navBarController = rootViewController as! UINavigationController
  552. return topViewControllerWithRootViewController(navBarController.visibleViewController)
  553. }
  554. if let presentedViewController = rootViewController.presentedViewController {
  555. return topViewControllerWithRootViewController(presentedViewController)
  556. }
  557. return rootViewController
  558. }
  559.  
  560. + (UIViewController *)topMostController {
  561. UIViewController * topController = [UIApplication sharedApplication].keyWindow.rootViewController;
  562. while (topController.presentedViewController || [topController isMemberOfClass:[UINavigationController class]]) {
  563. if([topController isMemberOfClass:[UINavigationController class]]) {
  564. topController = [topController childViewControllers].lastObject;
  565. } else {
  566. topController = topController.presentedViewController;
  567. }
  568. }
  569.  
  570. return topController;
  571. }
  572.  
  573. extension UIApplication {
  574.  
  575. class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
  576. if let navigationController = controller as? UINavigationController {
  577. return topViewController(controller: navigationController.visibleViewController)
  578. }
  579. if let tabController = controller as? UITabBarController {
  580. if let selected = tabController.selectedViewController {
  581. return topViewController(controller: selected)
  582. }
  583. }
  584. if let presented = controller?.presentedViewController {
  585.  
  586.  
  587. return topViewController(controller: presented)
  588. }
  589. return controller
  590. }
  591. }
  592.  
  593. UIApplication.topViewController()?.present(yourController, animated: true, completion: nil)
  594.  
  595. UIApplication.topViewController()?
  596. .navigationController?
  597. .popToViewController(yourController,
  598. animated: true)
  599.  
  600. UIViewController* parentController =[UIApplication sharedApplication].keyWindow.rootViewController;
  601.  
  602. while( parentController.presentedViewController &&
  603. parentController != parentController.presentedViewController )
  604. {
  605. parentController = parentController.presentedViewController;
  606. }
  607.  
  608. extension UIWindow {
  609.  
  610. func visibleViewController() -> UIViewController? {
  611. if let rootViewController: UIViewController = self.rootViewController {
  612. return UIWindow.getVisibleViewControllerFrom(rootViewController)
  613. }
  614. return nil
  615. }
  616.  
  617. class func getVisibleViewControllerFrom(vc:UIViewController) -> UIViewController {
  618. if vc.isKindOfClass(UINavigationController.self) {
  619.  
  620. let navigationController = vc as UINavigationController
  621. return UIWindow.getVisibleViewControllerFrom( navigationController.visibleViewController)
  622.  
  623. } else if vc.isKindOfClass(UITabBarController.self) {
  624.  
  625. let tabBarController = vc as UITabBarController
  626. return UIWindow.getVisibleViewControllerFrom(tabBarController.selectedViewController!)
  627.  
  628. } else {
  629.  
  630. if let presentedViewController = vc.presentedViewController {
  631.  
  632. return UIWindow.getVisibleViewControllerFrom(presentedViewController.presentedViewController!)
  633.  
  634. } else {
  635.  
  636. return vc;
  637. }
  638. }
  639. }
  640.  
  641. if let topController = window.visibleViewController() {
  642. println(topController)
  643. }
  644.  
  645. - (UIViewController*)findTopViewController {
  646.  
  647. id topControler = [self topMostController];
  648.  
  649. UIViewController* topViewController;
  650. if([topControler isKindOfClass:[UINavigationController class]]) {
  651. topViewController = [[(UINavigationController*)topControler viewControllers] lastObject];
  652. } else if ([topControler isKindOfClass:[UITabBarController class]]) {
  653. //Here you can get reference of top viewcontroller from stack of viewcontrollers on UITabBarController
  654. } else {
  655. //topController is a preented viewController
  656. topViewController = (UIViewController*)topControler;
  657. }
  658. //NSLog(@"Top ViewController is: %@",NSStringFromClass([topController class]));
  659. return topViewController;
  660. }
  661.  
  662. - (UIViewController*)topMostController
  663. {
  664. UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
  665.  
  666. while (topController.presentedViewController) {
  667. topController = topController.presentedViewController;
  668. }
  669. //NSLog(@"Top View is: %@",NSStringFromClass([topController class]));
  670. return topController;
  671. }
  672.  
  673. extension UIViewController {
  674. static var topmostViewController: UIViewController? {
  675. return UIApplication.sharedApplication().keyWindow?.topmostViewController
  676. }
  677.  
  678. var topmostViewController: UIViewController? {
  679. return presentedViewController?.topmostViewController ?? self
  680. }
  681. }
  682.  
  683. extension UINavigationController {
  684. override var topmostViewController: UIViewController? {
  685. return visibleViewController?.topmostViewController
  686. }
  687. }
  688.  
  689. extension UITabBarController {
  690. override var topmostViewController: UIViewController? {
  691. return selectedViewController?.topmostViewController
  692. }
  693. }
  694.  
  695. extension UIWindow {
  696. var topmostViewController: UIViewController? {
  697. return rootViewController?.topmostViewController
  698. }
  699. }
  700.  
  701. UIViewController *rootVC = [[UIApplication sharedApplication] keyWindow].rootViewController;
  702. if ([rootVC respondsToSelector:@selector(visibleViewController)])
  703. {
  704. UIViewController *topVC = [(UINavigationController *)rootVC visibleViewController];
  705. // do your thing with topVC
  706. }
  707.  
  708. @property(nonatomic,readonly,retain) UIViewController *topViewController; // The top view controller on the stack.
  709. @property(nonatomic,readonly,retain) UIViewController *visibleViewController; // Return modal view controller if it exists. Otherwise the top view controller.
  710.  
  711. + (UIViewController *)topViewControllerFor:(UIViewController *)viewController
  712. {
  713. if(!viewController.presentedViewController)
  714. return viewController;
  715. return [MF5AppDelegate topViewControllerFor:viewController.presentedViewController];
  716. }
  717.  
  718. /* View Controller for Visible View */
  719.  
  720. AppDelegate *app = [UIApplication sharedApplication].delegate;
  721. UIViewController *visibleViewController = [AppDelegate topViewControllerFor:app.window.rootViewController];
  722.  
  723. NSArray *arrViewControllers=[[self navigationController] viewControllers];
  724. UIViewController *topMostViewController=(UIViewController *)[arrViewControllers objectAtIndex:[arrViewControllers count]-1];
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement