#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];
Надеюсь, это поможет.