[英]iPhone - Navigation controller not working
我在iPhone上使用導航控制器會發瘋。 我有一個應用程序,在其中有一個主xib(帶有窗口的一個),我已經放置了NavigationController,在其中有一個viewController。 一切都已連接,並使用正確的繼承類名稱定義了ViewController。
在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中的所有項目似乎都已連接...並由屬性保留。 帶有窗口和navigationController的AppDelegate ...帶有相同navigationController的Window rootviewcontroller ...和帶有應用程序委托的文件所有者...
一切運行正常,但“偏好設置”窗口從未出現...
你知道為什么嗎?
如果需要的話,我必須說這個第一個視圖控制器使攝像頭界面出現並在其上放置覆蓋。 該按鈕位於此疊加層上。 imagePicker在viewDidAppear中顯示如下:
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
[self presentModalViewController:picker animated:YES];
[picker release];
編輯:在viewDidAppear中,self.navigationController在方法的開始和結束處都可以。 在definePreferences中,self.navigationController為nil。 在這兩個調用之間沒有任何東西被稱為。 沒有
編輯:問題可能來自我初始化按鈕所在的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];
}
但是...我該怎么辦?
首先,切勿調用IBAction setPreferences:
這違反了KVC,並最終可能導致各種奇怪的行為。 setX:
是名為x
的屬性的設置方法的保留名稱。
您不應該在此方法中創建導航控制器(即navController
)。 您應該使用在NIB中創建的那個( self.navigationController
)。 檢查是否為零。 如果是這樣,那么您要么沒有在NIB中設置導航控制器,要么沒有將其連接到該視圖控制器。
您還應該驗證nextWindow
為非nil。
我終於解決了這個問題。 參見https://stackoverflow.com/questions/5317968/iphone-camera-overlay-going-down-after-a-modal-view-transition
我的頭發少了... :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.