#iphone #navigationcontroller
#iPhone #navigationcontroller
Вопрос:
в моем viewcontroller у меня есть кнопка, при нажатии на которую вводится NavigationController, мой код, например:
-(IBAction)ShangHaiButtonPressed:(id)sender{
marketviewcontroller = [[MarketViewController alloc]initWithNibName:@"MarketViewController" bundle:nil];
NSLog(@"%@",self.navigationController);
[self.navigationController pushViewController:marketviewcontroller animated:YES];
[marketviewcontroller release];
}
но я вижу, что self.NavigationController равен нулю, как решить эту проблему? спасибо.
Обновить:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
_switchviewcontroller = [[SwitchViewController alloc]initWithNibName:@"SwitchViewController" bundle:nil];
[self.window addSubview:_switchviewcontroller.view];
[self.window makeKeyAndVisible];
return YES;
}
Комментарии:
1. Я предполагаю, что ваш currentViewController отсутствует в иерархии стека навигационного контроллера. добавление currentViewController в navigationcontroller должно решить проблему yr
2. В делегате приложения есть объект window , в методе AppDidFinishLaunching сначала создайте объект для yr firstcontroller, затем создайте объект NavigationController, подобный — [[UINavigationController alloc]initWithRootViewController:yrcurrentcontroller]; [self.window addSubview:NavigationController.view]
Ответ №1:
Свойство NavigationController контроллера представления вернет действительный объект контроллера навигации, только если контроллер представления находится в стеке навигации контроллера навигации. Контроллер представления можно добавить в стек навигации следующими способами.
-
Путем превращения контроллера представления в RootViewController навигационного контроллера с использованием initWithRootViewController: метод UINavigationController
-
Нажав на контроллер представления с помощью pushViewController: метод UINavigationController.
Убедитесь, что ваш контроллер представления добавлен в стек навигации любым из вышеперечисленных способов.
РЕДАКТИРОВАТЬ: (После того, как в вопрос добавлен код didFinishLaunchingWithOptions:):
Измените метод didFinishLaunchingWithOptions: на этот,
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
_switchviewcontroller = [[SwitchViewController alloc]initWithNibName:@"SwitchViewController" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:_switchviewcontroller];
[self.window addSubview:navController.view];
[navController release];
[self.window makeKeyAndVisible];
return YES;
}
Swift 4 (версия):
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
switchviewcontroller = SwitchViewController(nibName: "SwitchViewController", bundle: nil)
let navController = UINavigationController(rootViewController: switchviewcontroller)
window.addSubview(navController.view)
window.makeKeyAndVisible()
return true
}
Комментарии:
1. У меня просто есть приведенный выше код о работе с NavigationController, так что какой еще код мне нужно написать, спасибо.
2. У вас есть window -> currentViewController , и теперь вы хотите нажать marketviewcontroller , (т.Е.) window -> currentViewController -> marketviewcontroller, верно?
3. Хорошо. Отредактируйте свой вопрос и вставьте
didFinishLaunchingWithOptions:
туда код делегата приложения.4. большое вам спасибо, и я попробую. если это сработает, я приму ваш ответ, еще раз спасибо.
5. Ты спас мой день. Проверил, чтобы узнать, что я нажимаю с помощью presentViewController: анимированный
Ответ №2:
Этот код даст решение, которое вы ищете:
-(IBAction)ShangHaiButtonPressed:(id)sender {
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:self];
[self.view removeFromSuperview];
[appDelegate.window addSubview:nav.view]; // appDelegate is the delegate of your Application
marketViewController = [[MarketViewController alloc] initWithNibName:@"MarketViewController" bundle:nil];
[nav pushViewController:marketViewController animated:YES];
[marketViewController release];
}
Ответ №3:
В файле AppDelegate.m создайте свой первый вид rootView для навигации :
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
myView *Obj=[[myView alloc]initWithNibName:@"myView" bundle:nil];
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:Obj];
nav.navigationBar.barStyle = UIBarStyleBlackOpaque;
[window addSubview:nav.view];
[self.window makeKeyAndVisible];
return YES;
}
В вашем файле MyView.m добавьте приведенный ниже код для перехода к myNewView из MyView :
-(void) registerMethod {
myNewView *obj = [[myView alloc] initWithNibName:@"myNewView" bundle:nil];
[self.navigationController pushViewController:obj animated:YES];
[obj release];
}