Как выполнить Segue в AppDelegate?
Я пытаюсь выполнить приложение на IOS 5.1 с помощью раскадровки. В основном я делаю приложение dropbox. Поскольку я использую Dropbox SDK, ссылка на Dropbox обрабатывается в AppDelegate.m. У пользователя есть возможность отключиться от сеанса и связать его снова в разных Контроллерах Просмотр. Таким образом, каждый раз, когда пользовательская ссылка и несвязанное приложение должны переключать представление из Appdelegate на контроллер вида, который не подключен к rootviewcontroller
В исходном примере Dropbox Dropbox обрабатывается как следующий код
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
if ([[DBSession sharedSession] handleOpenURL:url]) {
if ([[DBSession sharedSession] isLinked]) {
[navigationController pushViewController:rootViewController.photoViewController animated:YES];
}
return YES;
}
return NO;
}
Но я использую Storyboard с контроллером навигации, и ни один из следующих методов не работает. Я помещаю методы в комментарии.
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
if ([[DBSession sharedSession] handleOpenURL:url]) {
if ([[DBSession sharedSession] isLinked]) {
NSLog(@"App linked successfully!");
// At this point you can start making API calls
/*UIViewController *viewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:NULL] instantiateViewControllerWithIdentifier:@"MeetingViewController"];
[self.navigationController pushViewController:viewController animated:YES]; */
//[self performSegueWithIdentifier:@"xxxx" sender:self];
/* LoginDropboxViewController *loginController=[[LoginDropboxViewController alloc] initWithNibName:@"LoginDropbox" bundle:nil];
[navigationController pushViewController:loginController animated:YES]; */
}
return YES;
}
// Add whatever other url handling code your app requires here
return NO;
}
Вот раскадровка приложения
![enter image description here]()
Итак, как я могу переключить представление в AppDelegate.h?
Примечание. Если я добавлю segue и назову segue, скажем, goToMeeting
[self performSegueWithIdentifier: @ "goToMeeting" отправитель: self];
Ошибка: No Visible @interface for 'AppDelegate' declares the selector performSegueWithIdentifier:sender
Ответы
Ответ 1
Если вы считаете, что нажатие на просмотр вручную, а не segueperform, следующий код, скорее всего, будет работать для вас.
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
if ([[DBSession sharedSession] handleOpenURL:url]) {
if ([[DBSession sharedSession] isLinked]) {
NSLog(@"App linked successfully!");
// At this point you can start making API calls
//push view manually
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
LoginDropboxViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"LoginDropbox"];
[(UINavigationController*)self.window.rootViewController pushViewController:ivc animated:NO];
}
return YES;
}
// Add whatever other url handling code your app requires here
return NO;
}
Ответ 2
Вы можете сделать это следующим образом:
UINavigationController *navigationController = (UINavigationController*) self.window.rootViewController;
[[[navigationController viewControllers] objectAtIndex:0] performSegueWithIdentifier:@"goToMeeting" sender:self];
Это будет работать только в том случае, если индекс в массиве viewControllers соответствует одному из ваших контроллеров представления и, если он существует, конечно. В этом случае это первый (в массиве и раскадровке).
Сессия ( "goToMeeting" ) не должна присоединяться к действию. Способ, которым вы это делаете, - это перетащить управление из значка владельца файла внизу сцены сцены в сцену назначения. Появится всплывающее окно, в котором будет запрашиваться опция в "Manual Segue"; выберите тип "Push". Нажмите на маленький квадрат и убедитесь, что вы в Инспекторе атрибутов. Дайте ему идентификатор, который вы будете использовать для ссылки на него в коде.