我在iPhone上使用導航控制器發瘋。 我有一個應用程序,與主xib(與窗口之一)裏面至極放置一個NavigationController,裏面至極我有一個viewController。所有東西都連接在一起,ViewController使用正確的繼承類名來定義。iPhone - 導航控制器不工作
在didFinishLaunchingWithOptions,我有:
[self.window addSubview:navigationController.view];
[self.window makeKeyAndVisible];
在.H我有:
@interface MainAppDelegate : NSObject <UIApplicationDelegate> {
IBOutlet UIWindow *window;
IBOutlet UINavigationController* navigationController;
}
@property (nonatomic, retain) UIWindow *window;
@property (nonatomic, retain) UINavigationController* navigationController;
@end
然後在首先的ViewController我具有連接到該方法中的按鈕:
- (IBAction) definePreferences:(id)sender {
PreferencesController *nextWindow = [[[PreferencesController alloc] initWithNibName:@"Preferences" bundle:nil] autorelease];
UINavigationController* navController = [[[UINavigationController alloc] initWithRootViewController:nextWindow] autorelease];
[self.navigationController presentModalViewController:navController animated:YES];
}
主xib中的所有項目似乎都被連接...並被屬性保留。在AppDelegate中有它的窗口和navigationController ...窗口RootViewController的具有相同navigationController ......與應用程序的委託文件的所有者...
一切都正常運行,但從來沒有出現在首選項窗口...
你能看到爲什麼嗎?
如果需要,我必須說,這第一個視圖控制器使相機接口出現並覆蓋它。該按鈕位於此覆蓋層上。所述imagePicker是示出像這樣在viewDidAppear:
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
[self presentModalViewController:picker animated:YES];
[picker release];
編輯: 在viewDidAppear,self.navigationController是在開始和方法的端部確定。 在definePreferences中,self.navigationController爲零。這兩個電話之間什麼都不叫。 Nothing
編輯: 問題可能來自我初始化按鈕所在的viewController的方式。 以下是由導航控制器調用的firstView調用的方法。
- (void) viewDidAppear:(BOOL)animated {
UIImagePickerController* picker = [[UIImagePickerController alloc] init];
// Set the image picker source:
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.showsCameraControls = NO;
picker.navigationBarHidden = YES;
picker.wantsFullScreenLayout = YES;
// Insert the overlay
OverlayViewController* overlayController = [[OverlayViewController alloc] initWithNibName:@"Overlay" bundle:nil];
picker.cameraOverlayView = overlayController.view;
// Show the picker:
[self presentModalViewController:picker animated:NO];
[picker release];
[super viewDidAppear:YES];
}
但是......我該怎麼辦?
你檢查你的'setPreferences:'方法實際上是被當你觸摸按鈕時調用,例如用日誌語句或調試器斷點? – Anomie 2011-03-15 01:31:51
@Anomie:當然 – Oliver 2011-03-15 01:35:10
請注意,您的窗口和navigationController都不會被保留,因爲您已經在ivars上設置了IBOutlet而不是屬性。因此,伊娃最終直接被設置,而不用通過可以「保留」它們的setter方法。 – Anomie 2011-03-15 02:22:31