UIStoryBoard получает контроллер первого вида из ApplicationDelegate
У меня есть протокол, который реализует приложение ApplicationDelegate. Я хочу передать это на первый контроллер представления, определенный в доске объявлений. Как получить доступ к нему из метода?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Ответы
Ответ 1
Я не уверен, правильно ли понимаю вопрос. Думаю, вы спрашиваете, как вы получаете первый viewController в раскадровке. Чтобы получить это, вы вызываете
UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc =[storybord instantiateInitialViewController];
Измените имя раскадровки в соответствии с вашим именем, MainStoryboard - это только имя по умолчанию. Надеюсь, это то, что вы искали.
Edit:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc =[storybord instantiateInitialViewController];
//set the delegate on the view controller that you have loaded
// Override point for customization after application launch.
return YES;
}
Ответ 2
Вместо того, чтобы создать новую копию существующей раскадровки, используя
UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
вы можете установить в своем файле заголовка делегата приложения это свойство
@property (nonatomic, weak) UIViewController* initialViewController;
и в этом методе просто присвойте self.window.rootViewController свойство
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.initialViewController = self.window.rootViewController;
return YES;
}
Это должно работать, потому что в свойстве window приложения делегат-протокол имеет доступ к rootViewConroller, и этот контроллер является initialViewController, если использует раскадровки.
Ответ 3
Внедрение Swift 2.0 для тех, кто хотел.
Вам может потребоваться изменить идентификатор STROYBAORD и идентификатор контроллера. Также o
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let storyboard: UIStoryboard = UIStoryboard(name: "[STORYBOARD NAME]", bundle: nil)
let viewController:UIViewController = storyboard.instantiateViewControllerWithIdentifier("[CONTROLLER IDENTIFIER]") // You have replace UIViewController with you customer controll type
self.window?.rootViewController = viewController
self.window?.makeKeyAndVisible()
return true
}