[英]load a view from storyboard using custom url scheme while app is running in background
我為我的應用程序設置了自定義網址方案,這是當應用程序不在后台運行時它的工作方式:
到現在為止還挺好。
這是我遇到的問題:
我的問題是,當我多次單擊自定義URL鏈接時,我需要做些什么來再次加載登錄視圖。
自定義url方案在第一次運行時效果很好,但在應用程序已經運行時卻無法運行。 我嘗試調試此問題……當我單擊自定義url方案鏈接時,在AppDelegate.m文件中調用了“ handleOpenURL:(NSURL *)url”方法,因此該怎么做才能再次從情節提要中加載登錄屏幕,以及如何如何檢查登錄屏幕是否已加載到內存中?登錄屏幕是我在情節提要中的開始視圖,以下是handleOpenUrl函數在我的應用程序委托中的外觀。
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
if(!url){
return NO;
}
// check if email link was clicked
if ([[url scheme] isEqualToString:@"docova"]) {
NSString *urlString = [url absoluteString];
NSLog(@"URL Parameter string: %@", [url query]);
NSLog(@"incoming url => %@", urlString);
// NSArray *arrayQStrings=[self getDataOfQueryString:urlString];
NSDictionary *dict = [self parseQueryString:[url query]];
NSLog(@"query dict: %@", dict);
NSLog(@"query dict: %@", [dict valueForKey:@"action"]);
NSLog(@"query dict: %@", [dict valueForKey:@"docpath"]);
//[self.tabBarController setSelectedIndex:1]; // tab 3
//[self.parentViewController.tabBarController setSelectedIndex:1]; // tab 3
/* save user data ***/
NSUserDefaults *appPrefs = [NSUserDefaults standardUserDefaults];
[appPrefs setObject:[dict valueForKey:@"action"] forKey:@"action"]; // reset these after using it
[appPrefs setObject:[dict valueForKey:@"docpath"] forKey:@"docpath"]; // reset these after using it
// save data to application preference
[appPrefs synchronize];
return YES;
}
return NO;
}
有人可以建議應用程序已經運行時如何從故事板中預先顯示視圖。 我知道android中有活動堆棧,ios中也有類似的東西...
我能夠使用mialkan的commnets來解決此問題,還必須將handleOpenUrl方法(不建議使用)更改為“ application:openURL:sourceApplication:annotation”,因此在我的openUrl方法中,我檢查特定的操作並調用了相應地查看,請參見以下內容:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
loginView = [storyboard instantiateViewControllerWithIdentifier:@"SIDLoginViewController"];
self.window.rootViewController = loginView;
謝謝mialkan :)
據我了解,您的界面構建器結構如下
導航控制器->登錄視圖控制器->標簽欄控制器
當您的應用程序已經在后台運行時,如果用戶通過郵件鏈接打開該應用程序,您想先顯示登錄視圖嗎?
您可以使用NSNotificationCenter
調用一種方法以彈出“登錄”視圖。
這是前 代碼來注冊和調用您的通知。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(popToLoginView:) name:@"popToLoginViewNotification" object:nil];
通知方法。
[[NSNotificationCenter defaultCenter] postNotificationName:@"popToLoginViewNotification" object:nil];
如果您具有TabbarController類,請放置popToLoginView
方法。 或popToLoginView
每個視圖控制器都放置popToLoginView
方法。 在視圖中檢查其當前視圖是否與此代碼
if (viewController.isViewLoaded && viewController.view.window) {
// viewController is visible
}
然后彈出進入登錄視圖。
我希望這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.