Проблема представления представления модально после загрузки UISplitView - PullRequest
2 голосов
/ 21 марта 2012

Я новичок в разработке UISplitView, поэтому я уверен, что есть что-то очевидное, что я делаю не так. У меня есть базовое приложение UISplitView для iPad, которое загружается с двумя контроллерами UITableView при запуске приложения. Это работает просто отлично.

То, что я пытаюсь сделать, это сразу после запуска, представляя модальное представление «аутентификация», так что пользователю необходимо будет войти в систему, прежде чем продолжить. Вот код, который у меня есть, который компилируется и работает без сбоев, но представление не отображается.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

  MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil];
  UINavigationController *masterNavigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];

  DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
  UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];

  self.splitViewController = [[UISplitViewController alloc] init];
  self.splitViewController.delegate = detailViewController;
  self.splitViewController.viewControllers = [NSArray arrayWithObjects:masterNavigationController, detailNavigationController, nil];

  masterViewController.detailViewController = detailViewController;
  masterViewController.managedObjectContext = self.managedObjectContext;

  self.window.rootViewController = self.splitViewController;
  [self presentAuthenticate];
  [self.window makeKeyAndVisible];

  applicationDidLaunch = YES;
  return applicationDidLaunch;
}

- (void) presentAuthenticate {
  AuthenticateViewController *loginController = [[AuthenticateViewController alloc] initWithNibName:@"AuthenticateViewController" bundle:nil];
  [loginController setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
  [loginController setModalPresentationStyle:UIModalPresentationFormSheet];

  if ([self.splitViewController respondsToSelector:@selector(presentViewController:animated:completion:)]) {
      [self.splitViewController presentViewController:loginController animated:NO completion:nil];
  } else {
      [self.splitViewController presentModalViewController:loginController animated:NO]; //iOS 4 works fine with or without animation   
  } 
}

Я определил AuthenticateViewController как представление с несколькими текстовыми полями в нем и связал его с представлением «Владельцы файла».

Спасибо заранее!

1 Ответ

2 голосов
/ 22 марта 2012

Контроллер представления не разрешит отправку / представление на другом просмотре до тех пор, пока представление не будет полностью загружено.

Проще говоря, нам не разрешено вызывать presentModalViewController / pushViewController в viewcontroller viewDidLoad / viewWillAppear. нам нужно вызвать это в viewDidAppear.

У меня была та же проблема, что вы сказали.

Я могу сказать следующее решение:

  1. Выполнить загрузку AuthenticateViewController после [self.window makeKeyAndVisible]; и в executeSelctor (может быть с задержкой).
  2. Перемещение кода для отображения AuthenticateViewController в представлении контроллера SplitView DetailView ViewDidAppear.

спасибо,

Навин Шан

...