2015-12-19 1 views
3

В какой-то момент я представляю UIImagePickerViewController. После того, как он представлен, я называю функцию: UIStoryboard.topViewController():Как получить контроллер верхнего уровня, когда представлен UIImagePickerController?

extension UIStoryboard { 

    class func topViewController(base: UIViewController? = UIApplication.sharedApplication().keyWindow?.rootViewController) -> UIViewController? { 

     if let nav = base as? UINavigationController { 
      return topViewController(nav.visibleViewController) 
     } 

     if let svc = base as? UISplitViewController where svc.viewControllers.count == 1 { 
      return topViewController(svc.viewControllers[0]) 
     } 

     if let presented = base?.presentedViewController { 
      return topViewController(presented) 
     } 

     return base 
    } 
} 

Когда я печатаю результат, все это я получаю:

0x000000014cb2aa00
{
UIKit.UIResponder = {...}
}

Как получить UIImagePickerController из topViewController() функция?

+1

Вы не должны связываться с иерархией представлений 'UIImagePickerController', и нажатие другого контроллера представления в его стеке сделает это. Кроме того, поскольку это подкласс 'UINavigationController', ваш метод' topViewController' даже не вернет 'UIImagePickerController'; в лучшем случае он вернет верхний VC в стек 'UIImagePickerController'. –

+0

о, вы правы, совершенно правы. –

+0

Непонятно, что вы просите. Вам интересно, как получить сборщик изображений в результате функции topViewController? – Carlos

ответ

0

Не полный ответ на ваш случай, но вот как я нахожу верхушку VC в своей программе. Вы должны иметь возможность редактировать его для своего дела.

class UIHelper { 
static func getCurrentViewController() -> UIViewController? { 
    var currentViewController: UIViewController? 
    if let window = UIApplication.sharedApplication().delegate?.window { 
     currentViewController = window!.rootViewController?.presentedViewController 
    } 
    if currentViewController == nil { 
     return nil 
    } 

//Check for my version of my main tab bar VC 
    if let tabBarController = currentViewController as? RootTabBarController { 
     currentViewController = tabBarController.selectedViewController 
     print("Tab bar presents \(currentViewController)") 
    } 
// Check if it's a nav VC 
    if let navController = currentViewController as? UINavigationController { 
     currentViewController = navController.viewControllers[0] as? UIViewController 
     print("Nav controller presents \(currentViewController)") 
    } 

    print("Current controller: \(currentViewController)") 

    return currentViewController 
} 
} 
+0

Нет, это не полезно :(потому что он все равно не заботится о 'UIImagePickerController' :-( –

+0

Итак, вы добавляете раздел, где он проверяет этот класс? – Carlos

 Смежные вопросы

  • Нет связанных вопросов^_^