2013-12-18 4 views
0

Когда в учетной записи iPad нет учетной записи, она открывает почтовые клиенты на выбор? После выбора почтового клиента контроллер вида отклоняется модально и отображается UISplitViewController.Как показать ViewController, а затем отключить его, чтобы показать UISplitViewController?

Я хочу работать над приложением iPad, где я должен сначала показать ViewController и отклонить его, чтобы показать UISpiltViewController. Интересно, как это делается.

Я мог только пообедать UISplitViewController сначала, установив его на контроллер rootView. Вот мой код

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 



    PopViewController * menuVC = [[PopViewController alloc] initWithStyle:UITableViewStyleGrouped]; 
    UINavigationController * navMenue = [[UINavigationController alloc] initWithRootViewController:menuVC]; 

    DetialViewController *delainVC =[[DetialViewController alloc] init]; 
    UINavigationController * navdetail = [[UINavigationController alloc] initWithRootViewController:delainVC]; 

    UISplitViewController *splitVC = [[UISplitViewController alloc] init]; 
    splitVC.viewControllers = [NSArray arrayWithObjects:navMenue,navdetail, nil]; 


    self.window.rootViewController = splitVC; 
    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

я узнаю, что вы всегда должны установить UISplitViewController в качестве RootViewController. Но моя цель - открыть ViewController до UISplitViewController. Точно как iPad почтовое приложение, когда нет настройки учетной записи.

+1

Я думаю, что вы получили это право. После установки контроллера корневого представления, решите, хотите ли вы поставить на него контроллер модального представления. –

+0

Я открыл диспетчер modal view поверх него. Это выглядит странно, потому что я видел SplitViewController, прежде чем модальный вид будет открыт. –

ответ

2

С - (пустоты) viewDidLoad вызывается до - (недействительными) viewDidAppear: (BOOL) анимированные. при открытии контроллера модального представления без анимации в поле зрения был метод загрузки. решил проблему. И не было никакого взгляда на UISplitViewcontroller. Ниже приведен код. Этот код следует размещать в контроллере detailview.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self checkLogIn]; 

} 

написал функцию, чтобы проверить, если пользователь уже вошел в

-(void) checkLogIn{ 

    if(notLoggedIn){ 
     ViewController * VC = [[ViewController alloc] init]; 
     [self presentViewController:VC animated:NO completion:nil]; 
    } 

} 
+1

Приятно знать, что это работает на контроллере с разделенным изображением. Это не универсальное решение: если вы попробуете это с контроллера первой вкладки в контроллере панели вкладок (или автономном контроллере), вы получите сообщение об ошибке (попытка представить в чей вид не находится в иерархии окон!). Однако он работает на контроллере корневого представления контроллера навигации. – rdelmar

+0

@rdelmar Он просто сделал образец проекта. вышеприведенный код работает и для контроллера корневого представления в качестве навигационного контроллера. Я не знаю, лучшее ли решение выше, но оно работает так, как ожидалось. Я хотел бы посмотреть, есть ли другое решение. –

1

Если вы представляете modal view controller из метода viewDidAppear контроллера детального представления (без анимации), это будет первое, что вы увидите. Например,

-(void)viewDidAppear:(BOOL)animated { 
    if (notLoggedIn) { 
     UIViewController *modal = [self.storyboard instantiateViewControllerWithIdentifier:@"Blue"]; 
     [self presentViewController:modal animated:NO completion:nil]; 
    } 
} 
+0

Спасибо за ответ. Я все еще вижу взгляд UISplivewController перед загрузкой контроллера модального просмотра. Я узнал, что я делал неправильно. Я открыл modal view controller с анимацией. Я проголосую за ваш ответ. Но для будущей ссылки я опубликую ответ, который сработал хорошо. –

+0

@RedDevil, вы видели это «взгляд» на симуляторе или устройстве. Я тоже этого не вижу. – rdelmar

+0

да я посмотрел взгляд .. Поскольку - (void) viewDidLoad вызывается раньше - (void) viewDidAppear: (BOOL) анимированный .. размещение кода в viewdidload разрешило проблему –

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