2015-07-10 27 views
1

我目前實例故事板編程就像這樣:如何在appdelegate中找到visibleViewController?

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() 

這是我第一次與推送通知的工作,所以我不確定的最佳實踐,但我想要做的是在didReceiveRemoteNotification和當應用程序處於活動狀態(前景)時,我希望能夠確定用戶當前正在查看哪個視圖以確定我是否應該A)調用本地通知或B)如果推送通知對應於可見的視圖。

使用各種其它SO相關的問題,我曾嘗試使用這些代碼的變化來訪問visibleviewcontroller:

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

1)

let visibleController: AnyObject? = navigationController.visibleViewController 

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

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") 
    } 
} 

我運行到的問題是,我只能獲得RootViewController的,從不可見視圖控制器。在這種情況下,rootviewcontroller是一個登錄屏幕,儘管我在profileViewController上,但我只能獲得loginviewcontroller。這是處理推送通知的最佳方法嗎?

回答

1

移動到故事板從目標視圖控制器時,推送通知的意志來到

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) 

這是從的appdelegate爲我工作。對於更多的東西

使用通知中心:

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. 
} 

與通知中心將數據傳遞

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

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

感謝你回答!我要編輯我的帖子,但我很好奇的是應用程序在前臺。如何更新用戶界面/確定我在哪個視圖以正確更新用戶界面? – Jay

+1

@Jay你可以使用'NSNotificationCenter'來更新你的UI –

+0

你是對的,我沒有做好我的研究。我應該問的問題是,訪問將更新UI的信息的最佳方式是什麼?在didReceiveRemoteNotification中,如何將userInfo傳遞給觀察者? – Jay