/ / Jak znaleźć widocznyViewController w appdelegate? - szybki

Jak znaleźć visibleViewController w appdelegate? - szybki

Obecnie tworzę scenariusze sceniczne w taki sposób:

var iphone35StoryBoard:UIStoryboard = UIStoryboard(name: "iphone35", bundle: nil)

var initialViewController:UIViewController = iphone35StoryBoard.instantiateInitialViewController() as! UIViewController

self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

self.window?.rootViewController = initialViewController

self.window?.makeKeyAndVisible()

Po raz pierwszy pracuję z pushpowiadomienia, więc nie jestem najlepszą praktyką, ale próbuję zrobić to w didReceiveRemoteNotification, a gdy aplikacja jest w stanie aktywnym (pierwszym planie), chciałbym móc określić, jaki widok użytkownik aktualnie przegląda aby ustalić, czy powinienem: A) zadzwonić do lokalnego powiadomienia lub B) zaktualizować widok, jeśli powiadomienie push odpowiada widocznemu widokowi.

Korzystając z różnych innych pytań związanych z SO, próbowałem uzyskać dostęp do kontrolera viewview przy użyciu następujących odmian kodu:

let navigationController = application.windows[0].rootViewController as! UINavigationController

1)

let visibleController: AnyObject? = navigationController.visibleViewController

if visibleController is ProfileViewController {
println("this works")
}

i

2)

let viewControllers: [UIViewController] = navigationController.viewControllers as! [UIViewController]

for vc in viewControllers {
if vc is ProfileViewController {
println("this works")
}
}

3)

if let wd = self.window {
var vc = wd.rootViewController
if(vc is UINavigationController){
vc = (vc as UINavigationController).visibleViewController
}

if(vc is ProfileViewController){
println("this works")
}
}

Problem, na który wpadam, polega na tym, że mogę tylkouzyskaj rootviewcontroller, a nigdy widoczny kontroler widoku. W tym przypadku rootviewcontroller to ekran logowania i pomimo tego, że jestem na profileViewController, mogę uzyskać tylko loginviewcontroller. Czy to najlepsza metoda radzenia sobie z powiadomieniami push?

Odpowiedzi:

1 dla odpowiedzi № 1

Przenieś do kontrolera widoku docelowego z scenorysu, gdy pojawi się powiadomienie wypychane

    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main",bundle: nil)
var destViewController : destVC
destViewController = mainStoryboard.instantiateViewControllerWithIdentifier("destVC") as! destVC
var navigationController =  UIApplication.sharedApplication().keyWindow!.rootViewController as! UINavigationController
navigationController.pushViewController(destViewController, animated: true)

To działa dla mnie od appdelegate.

Skorzystaj z centrum powiadomień, aby uzyskać więcej informacji:

NSNotificationCenter.defaultCenter().postNotificationName("name", object: nil, userInfo:nil)

NSNotificationCenter.defaultCenter().addObserver(self, selector: "method:", name: "name", object: nil)

func method(notification: NSNotification) {
//Do your stuff.
}

Przekazywanie danych za pomocą centrum powiadomień

NSNotificationCenter.defaultCenter().postNotificationName("name", object:nil, userInfo:["message":"Unable to add (homeName) Home"])

func method(notification: NSNotification) {
//Do your stuff.
println(notification.userInfo)
}