2014-01-06 4 views
0

Цель:Представляя вид впервые в AppDelegate

Когда мое приложение запускается - мне это нужно, чтобы отобразить представление, прежде чем он попадает на экран «Home». Это приложение панели вкладок, и это представление не является частью панели.

Я использую раскадровки и Xcode 5 - приложение только для iOS7.

Проблема:

У меня есть код, который будет проверять, если приложение является первым запуск или нет. Исходя из этого, я хочу представить пользователю только один раз просмотр.

То, что я пробовал:

Следующий код в AppDelegate приложения, как это, где все это начинается. Я называю следующий фрагмент кода там:

-(void)showCountrySettings 
{ 

    if (self.termsHaveBeenAccepted){ 

     BBCounterySettingsViewController *countrySettings = [[BBCounterySettingsViewController alloc]initWithNibName:@"View" bundle:nil]; 

     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
     UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"IDENTIFIER"]; 
     [self.navigationController pushViewController:vc animated:YES]; 
} 

Я получаю ошибку компиляции, как [self.navigationController..] не существует. [self.tabbarcontroller...];

Это очевидно, так как у меня нет настроек свойств для них - но как мне решить это и подключить панель вкладок к раскадровке?

Что мне не хватает?

+0

сделать у вас NavigationController или TabBarColler в Уре раскадровке как уставившись точку. – CoolMonster

+0

TabBarController - который задан как начальный вид. – Tander

+0

вы просто хотите показать какое-то представление как поп, иначе вам нужно показать viewController. – CoolMonster

ответ

1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 


    if(!isAgreementAccepted) 
    { 

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"IDD"]; 
    self.window.rootViewController=vc; 
    } 

    return YES; 
} 

Если соглашение не будет принято установить T & C viewController в rootViewController когда пользователь нажимает на кнопку принять затем установите TabBarviewController как корень.

и может получить доступ к объекту вдовой через приложение делегата где-либо

[[[UIApplication sharedApplication]delegate] window].rootViewController=tabViewController. 
+0

Это, кажется, самый простой способ сделать это. Я тестировал, и он делает то, что мне нужно. Спасибо! – Tander

0

Если Tabbarcontroller является вашим корневым контроллером просмотра, то использование нижеприведенного кода решит проблему в вашем appdelegate.

-(void)showCountrySettings 
    { 

    if (self.termsHaveBeenAccepted){ 

    BBCounterySettingsViewController *countrySettings = [[BBCounterySettingsViewController alloc]initWithNibName:@"View" bundle:nil]; 

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"IDENTIFIER"]; 
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 

    [tabBarController presentModalviewcontroller:vc animated:YES completionblock:nil]; 
    } 
+0

Спасибо - однако [self.tabbarcontroller ...]; дает ошибку: «Настроить tabbarcontroller не найден на объекте типа BBAppDelegate» – Tander

+0

UITabBarController * tabBarController = (UITabBarController *) self.window.rootViewController; Кстати, почему Даун голосует? Дайте правильную причину проголосовать, чтобы каждый мог учиться. – Mavericks

+0

Спасибо - однако я получаю следующее сообщение: 2014-01-06 12:12:45.327 BidOrBuy [1168: 70b] Предупреждение: попытайтесь представить в , чей вид не находится в иерархии окон! – Tander

1

Изменение RootViewController окна programaticaly

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    UIStoryboard *aStoryBoard=[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; 
    UITabBarController *aTabCtrl=[aStoryBoard instantiateViewControllerWithIdentifier:@"Tab"]; 
    FirstVC *aFirstCtrl=[aStoryBoard instantiateViewControllerWithIdentifier:@"First"]; 

    if(self.termsHaveBeenAccepted) 
     self.window.rootViewController=aFirstCtrl; 
    else 
     self.window.rootViewController=aTabCtrl; 
    return YES; 
} 

Это, безусловно, работать я испытал.

+0

Спасибо - да, это действительно работает. Я буду помнить этот код. Мне нужно представить другой экран, и этот код поможет там. – Tander

+0

Да, вы можете изменить любой экран. – cjd

0

добавить ViewController SuperView из tabbarcontroller как первый раз еще называют tabbarcontroller в одиночку

Смежные вопросы