2012-11-13 39 views
0

使用UINavigationController時我有點問題。當使用pushViewController時,UINavigationController變爲空

我有一個第一ViewController (called LaunchViewController)與導航控制器(即正常工作),我可以使用pushViewController顯示second ViewController (called SettingViewController)和正常工作過,但是當(從第一個視圖控制器)我想顯示第三ViewController (called IPhonePage),後該視圖顯示,當我想在我的IPhonePage使用navigation controller,該navigation controllernull...

不知道是不是我的問題是清楚的,我可以告訴你我用做代碼:

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 controllerSettingViewController)

但對此,

LaunchViewController.m :

- (void)ShowPageWithIMDevicePage:(id<IMDevicePage>)page { 
    [self.navigationController pushViewController:(UIViewController*)page animated:YES]; 
} 

頁面創建:

- (id<IMDevicePage>)CreatePage { 
    return [[IPhonePage alloc] init]; 
} 

而且我IPhonePage類看起來像這樣,

IPhonePage.h:

@interface IPhonePage : UIViewController <IMDevicePage> 

IPhonePage.m:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSLog(@"navigation controller = %@", self.navigationController); 
} 

而日誌顯示導航控制器=(空),例如我無法訪問navigation controller.

我真的很希望有人能夠理解我想要的東西,我知道這有點複雜,但這是因爲我以這種方式做出的特定原因。

謝謝!乾杯:)

編輯 其實這是因爲我創建的頁面,我設置之類的標題,內容和工具欄不同的東西,然後我打電話pushViewController,奇怪的是,我有一個設置方法的UIViewController中

IPhonePage.m

- (void)SetContentWithIMDeviceControl:(id<IMDeviceControl>)content { 
    self.view = (UIView*)content; 
} 

而且它不叫了我的viewDidLoad方法後的內容(任何線索?)。 我也有它的作用是在視圖

- (void)SetApplicationBarWithIMDeviceApplicationBar:(id<IMDeviceApplicationBar>)appBar { 
} 

起初我想用導航控制器來設置此工具欄的底部添加工具欄的方法,但由於這種方法是在pushViewController方法之前調用,導航控制器是零。 有沒有可能在不致電pushViewController的情況下手動設置導航控制器?或者任何其他方式來添加工具欄?像聲明一個工具欄並將其添加爲子視圖可​​能?

回答

1

試着這麼做:

- (void)ShowPageWithIMDevicePage:(id<IMDevicePage>)page { 
    YourDelegate* delegate = (YourDelegate*)[[UIApplication sharedApplication] delegate]; 
    IPhonePage* pageVC = (IPhonePage*)page; 
    [delegate.navigationController pushViewController:pageVC animated:YES]; 
} 
+0

既不適用也不適用 – EdRbt

+0

會發生什麼情況?它做什麼?它推動了一個白頁? 嘗試NSLog你的IPhonePage的東西。像NSLog(@「測試iphone頁面:%@」,page.testable_attribute),並告訴我們日誌看起來是否正確。 – Seb

+0

它顯示內容(一個UITableView),它設置標題,所以它的工作。我只是無法訪問導航控制器... – EdRbt

0

您可以訪問self.navigationController - (無效)viewWillAppear中的功能。當你創建UIViewController時,調用 - (void)viewDidLoad。而在這個時候,你還沒有調用pushViewController函數,因此self.navigationController沒有設置。

相關問題