我使用UINavigationController
时遇到了一些问题。
我有一个带导航控制器的第一个ViewController (called LaunchViewController)
(工作正常),我可以使用pushViewController
来显示second ViewController (called SettingViewController)
,它也可以正常工作,但是(从第一个开始)视图控制器)我希望在显示视图后显示第三个ViewController (called IPhonePage),
,当我想在我的navigation controller
中使用IPhonePage
时,navigation controller
为{{1 }}
不知道我的问题是否清楚,我可以告诉你我用来做的那些代码:
null...
AppDelegate.m :
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
LaunchViewController* controller = [[LaunchViewController alloc] initWithNibName:@"LaunchViewController" bundle:nil];
_navigationController = [[UINavigationController alloc] initWithRootViewController:controller];
_navigationController.navigationBar.tintColor = [UIColor blackColor];
[self.window setRootViewController:_navigationController];
[self.window makeKeyAndVisible];
return YES;
}
LaunchViewController.m :
这很好用(我可以访问- (IBAction)showSettings:(id)sender {
SettingViewController* controller = [[SettingViewController alloc] initWithNibName:@"SettingViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:YES];
}
navigation controller
但是,
SettingViewController)
LaunchViewController.m :
该页面由以下人员创建:
- (void)ShowPageWithIMDevicePage:(id<IMDevicePage>)page {
[self.navigationController pushViewController:(UIViewController*)page animated:YES];
}
我的IPhonePage类看起来像这样,
IPhonePage.h:
- (id<IMDevicePage>)CreatePage {
return [[IPhonePage alloc] init];
}
IPhonePage.m:
@interface IPhonePage : UIViewController <IMDevicePage>
日志显示导航控制器=(null),例如我无权访问- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"navigation controller = %@", self.navigationController);
}
我真的希望有人能理解我想要的东西,我知道它有点复杂,但这是因为我有这样做的具体原因。
谢谢!干杯:)
修改
实际上它发生是因为我创建了页面,我设置了不同的东西,如标题,内容和工具栏,然后我调用navigation controller.
,奇怪的是我有一个方法来设置UIViewController的内容
pushViewController
IPhonePage.m
之后它不再调用我的viewDidLoad方法(任何线索?)。 另外,我有一个方法,其角色是在视图底部添加工具栏
- (void)SetContentWithIMDeviceControl:(id<IMDeviceControl>)content {
self.view = (UIView*)content;
}
首先我想使用导航控制器来设置此工具栏,但由于此方法在- (void)SetApplicationBarWithIMDeviceApplicationBar:(id<IMDeviceApplicationBar>)appBar {
}
方法之前调用,因此导航控制器为零。
是否有可能在不调用pushViewController
的情况下手动设置导航控制器?或者任何其他方式添加工具栏?就像声明工具栏并将其添加为子视图一样?
答案 0 :(得分:1)
尝试类似:
- (void)ShowPageWithIMDevicePage:(id<IMDevicePage>)page {
YourDelegate* delegate = (YourDelegate*)[[UIApplication sharedApplication] delegate];
IPhonePage* pageVC = (IPhonePage*)page;
[delegate.navigationController pushViewController:pageVC animated:YES];
}
答案 1 :(得分:0)
您可以在 - (void)viewWillAppear函数中访问self.navigationController。创建UIViewController时,会调用 - (void)viewDidLoad。此时,您尚未调用pushViewController函数,因此未设置self.navigationController。