我正在尝试使用iPhone应用程序切换视图 - 我有一个父视图控制器SuperviewController
,然后我想在该父视图中切换两个视图MainMenuController
和{{ 1}}。
* 编辑 * :我现在正在使用导航控制器:
viewDidLoad中
MainGameController
self.mainMenuController = [[MainMenuController alloc] initWithNibName:@"MainMenu" bundle:nil];
的 switchToMainGame
[[self navigationController] pushViewController:self.mainMenuController animated:NO];
self.mainGameController = [[MainGameController alloc] initWithNibName:@"MainGame" bundle:nil];
应用程序正确加载mainMenu.xib。但是,当调用 switchToMainGame 时,没有任何反应 - 就好像XCode忘记了mainGameController是什么。
感谢您的帮助。
答案 0 :(得分:1)
您可以考虑使用UINavigationController交换视图控制器而非视图。
在AppDelegate.h中
@interface AppDelegate : NSObject <UIApplicationDelegate>
{
UIWindow *window;
UINavigationController *navigationController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@end
并在 - [AppDelegate applicationDidFinishLaunching:]实例化navigationController,因此:
[self setNavigationController:[[UINavigationController alloc] initWithRootViewController:mySuperviewController]];
[[self navigationController] setNavigationBarHidden:YES];
// Configure and show the window
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
然后在SuperviewController.m中,你可以实例化你的MainMenuController和MainGameController。要从MainMenuController开始,您可以在SuperviewController -viewDidLoad
中执行此操作[[self navigationController] pushViewController:[self mainMenuController] animated:YES];
你需要添加一些智能来直接在mainMenuController和mainGameController之间切换 - 但这并不困难。
为了不再一次重新加载nib,请考虑定义这样的访问器方法:
- (MainGameController*) mainGameController
{
if (mainGameController == nil)
{
mainGameController = [[MainGameController alloc] initWithNibName:@"MainGame" bundle:nil];
}
return mainGameController;
}
另外,请记住,在推送其他视图控制器(例如,mainGameController)之前,在兄弟视图控制器之间切换涉及弹出当前视图控制器(例如,mainMenuController)。