Раскадровка устанавливает rootViewController из NavController в tableView, но при запуске приложения показывает другое представление - PullRequest
6 голосов
/ 17 декабря 2011

У меня есть базовый стек навигации: NavController-> UITableViewController (как rootViewController в NavController) -> пункты меню, основной опцией является пользовательский viewController. Я хочу, чтобы мое приложение запускалось с основным настраиваемым контроллером представления в качестве текущего представления в стеке navigationController и кнопкой «Назад» для перехода в главное меню. Есть ли какой-нибудь способ использовать раскадровку для настройки стека таким образом, и все же при запуске сначала показывать пользовательское представление?

Я стараюсь делать это как можно больше в раскадровке. Я знаю, что могу зайти в appDelegate и appDidFinishLaunching ... вставить пользовательский viewController в navController, но это просто плохо, потому что в моем appDelegate мне нужно ссылаться на navController и пользовательский viewController.

Ответы [ 2 ]

17 голосов
/ 17 декабря 2011

К сожалению, UIStoryboard не может визуально манипулировать иерархией UINavigationController.В вашем случае вам необходимо программно установить иерархию в вашем делегате приложения.К счастью, из-за раскадровки делегат вашего приложения уже содержит ссылку на этот контроллер навигации.

При раскадровке так называемый «начальный контроллер представления» будет подключен к свойству rootViewController в экземпляре приложения.из UIWindow к тому времени, когда сообщается -applicationDidFinishLaunchingWithOptions:.

- (BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)options
{
    UINavigationController *navController = (UINavigationController *)self.window.rootViewController;
    MenuViewController *menu = [navController.storyboard instantiateViewControllerWithIdentifier:@"MenuController"];
    CustomViewController *custom = [navController.storyboard instantiateViewControllerWithIdentifier:@"CustomController"];

    // First item in array is bottom of stack, last item is top.
    navController.viewControllers = [NSArray arrayWithObjects:menu, custom, nil];

    [self.window makeKeyAndVisible];

    return YES;
}

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

0 голосов
/ 21 декабря 2011

Хотя это и не решение раскадровки как таковое, метод экземпляра UINavigationController popToViewController: animated: позволяет запускать ваше приложение с определенным контроллером представления в качестве отображаемого.

Я часто использую его при тестировании своих приложений, поэтому мне не нужно проходить весь стек навигации, чтобы попасть в ВК, над которым я работаю!

Я не уверен, что то, что вы хотите сделать, можно сделать в раскадровке.

H.

...