2011-11-09 70 views
0

我只想設置一個navigationControllerview在同一個xib文件上。使用一個h,m和xib設置navigationController

XIB結構

  • File's Owner
  • navigationController - >Navigation Controller
  • First Responder
  • Navigation Controller
  • navigationController - >File's Owner
  • view - >Scroll View
  • Scroll View
  • view - >Navigation Controller

.H

@interface WannaBeNavController : UINavigationController <UINavigationControllerDelegate> { 
    UINavigationController *navigationController; 
} 

@property (nonatomic, retain) IBOutlet UINavigationController *navigationController; 

@end 

的.m

#import "WannaBeNavController.h" 


@implementation WannaBeNavController 
@synthesize navigationController; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.navigationController = navigationController; 

    //[self setNavigationController:navigationController]; 
    //[navigationController setView:self.view]; 



@end 

我試過了一些沒有成功的東西。我看到的只是一個空白的navigationController

回答

0

我知道這是可能的多個文件或在controllerxib與一個window,但它似乎並不像只有三個文件(h,m和xib)。

因此,這裏是我做的事,而不是:

  • 使用UIViewController代替UINavigationController
  • 使用UINavigationBar在頂部欄中。
  • 添加下面的UINavigationBar
  • 一個UIScrollViewUIScrollView屬性檢查器中啓用(選中)彈跳垂直
  • 當用戶滾動時,使UIScrollView顯示在UINavigationBar的下方。我不知道如何完成這一步,但是當我弄清楚時我會回覆說明。
1

您正在將navigationController分配給自己,可能是nil

我只是創建一個沒有任何鏈接到NavigtaionController的正常ViewController(h,m,xib)(所以它也可以在基於導航的應用程序中重用);)。 NavigationController本身將設置該viewcontroller的navigationController屬性。

在代碼中你寫某事像:

MyViewController *myVC = [[MyViewController alloc] initWithNibName:@"MyViewController"]; 
UINavigationController *navContr = [[UINavigationController alloc] initWithRootViewController:myVC]; 
[myVC release]; 

//[window addSubView: navContr.view]; // or sth similar 
window.rootViewController = navContr; // thanks to Paul Lynch for that line of code 

編輯

在tabbarcontroller然後就這段代碼的情況下:

MyViewController1 *myVC1 = [[MyViewController alloc] initWithNibName:@"MyViewController"]; 
MyViewController2 *myVC2 = [[MyViewController2 alloc] initWithNibName:@"MyViewController2"]; 
//... 
UINavigationController *nav1 = [[UINavigationController alloc] initWithRootViewController:myVC1]; 
UINavigationController *nav2 = [[UINavigationController alloc] initWithRootViewController:myVC2]; 
//... 
UITabBarController *tabBarContr = [[UITabBarController alloc]init]; 
[tabBarContr setViewControllers:[NSArray arrayWithObjects:nav1,nav2,nil] animated:NO]; 

window.rootViewController = tabBarContr;  

[myVC1 release]; 
[myVC2 release]; 
[nav1 release]; 
[nav2 release]; 
[tabBarContr release]; 
+1

對於最新版本的iOS,這會更好:window.rootViewController = navContr; –

+0

訣竅是:沒有'window',因爲它不在「app delegate」或w/e中。它的視圖已經是'UITabBarController'的一部分。我知道還有其他的方法可以做到這一點,我只想做一個視圖,而無需將6個以上的文件添加到我的項目中。 – Jacksonkr

+0

看看我的編輯。將它設置爲rootViewController窗口只是一個例子。如果你在另一個視圖控制器內,那麼你也可以編寫'[self.view addSubView:navContr.view]'。但在另一個視圖內的某個NavigationController不會在cupertino中看到,並可能導致拒絕 – thomas

相關問題