使用pushViewController时,UINavigationController变为null

时间:2012-11-13 15:14:18

标签: iphone ios uikit

我使用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的情况下手动设置导航控制器?或者任何其他方式添加工具栏?就像声明工具栏并将其添加为子视图一样?

2 个答案:

答案 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。