我在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