Как вызвать другой класс в контроллере навигации и добавить его в делегат приложения

#iphone #objective-c #navigationcontroller

#iPhone #objective-c #navigationcontroller

Вопрос:

Я создал приложение на основе представления и в файле appdelegate .h я создал объект UINavigationController и добавил его в подвиде window. Далее, когда приложение завершило запуск, я выделил и инициализировал класс, который я хочу, чтобы его просматривали при первом запуске приложения с панелью навигации в верхней части.

Итак, это код, который я сделал, чтобы добавить класс на панель навигации

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

    // Add the view controller's view to the window and display.
    [window addSubview:navController.view];
    //test is the class that i want to be viewed first when  the app launches first
    test *t = [[test alloc]initWithNibName:@"test" bundle:nil];
    [navController.view addSubview:t.view];
    [window makeKeyAndVisible];

    return YES;
}
  

но проблема в том, что мой тестовый класс запускается, но он не отображает панель навигации. В чем может быть проблема?

Ответ №1:

Используйте что-то подобное этому (добавьте эти строки)

AppDelegate.h

UINavigationController * NavController

 @property (nonatomic,retain) UINavigationController *navController;
  

и в .m

 test *t = [[test alloc]initWithNibName:@"test" bundle:nil]; 
self.navController=[[[UINavigationController alloc] initWithRootViewController:t] autorelease];

[window addSubview:self.navController.view];
 [window makeKeyAndVisible];
  

это поможет вам.

Из другого представления вам нужно создать объект класса AppDelegate, а затем получить доступ к контроллеру навигации этого класса

смотрите это

 yourAppDelegateClass *objAppDelegate=(yourAppDelegateClass *)[[UIApplication sharedApplication] delegate];
  

теперь для отправки представления

 SecondView *s=[[[SecondView alloc] initWithNibName:@"yournibName" bundle:nil] autorelease];
[objAppDelegate.navController pushViewController:s animated:YES];
  

эта концепция поможет вам.

Комментарии:

1. привет, ишу, мой код работает правильно для класса делегата, но что, если я захочу вызвать панель навигации на другом контроллере. Спасибо

2. мое приложение предназначено для просмотра, поэтому, если я создам оконное приложение и использую тот же код, оно будет работать на

Ответ №2:

Вы не должны добавлять представление вашего собственного view controller в качестве подвида навигационного контроллера. Таким образом, вы скрываете представление навигационного контроллера (включая панель навигации), и это делает навигационный контроллер бессмысленным, потому что он не знает, что ваш view controller хочет быть частью его навигационного стека.

Вместо этого поместите его в стек контроллера навигации с помощью:

 [navController pushViewController:myViewController animated:NO];
  

Ответ №3:

Панель навигации не отображается, потому что вы настраиваете вид навигационного контроллера на свой тестовый вид. Вы можете сделать это, установив контроллеры просмотра навигационного контроллера, для которых требуется массив как —

 test *t = [[test alloc]initWithNibName:@"test" bundle:nil];
NSArray *viewControllers = [[NSArray alloc] initWithObjects:t,nil];
[self.navigationController setViewControllers:viewControllers];
  

Ответ №4:

Во-первых, я не вижу, где вы выделяете инициализацию своего NavController. Во-вторых, вы не добавляете ViewController в представление контроллеров навигации, а помещаете контроллер представления в стек, вот так:

 [navController pushViewController:t animated:NO];
  

Надеюсь, это поможет.