我在xCode中使用基于视图的应用程序模板创建了一个新应用程序。
我的第一个视图,在加载应用时显示,是一个基于按钮的菜单。其中一个按钮(Make)应使用NavigationViewController加载新的导航堆栈。实现时还有其他按钮可以执行NavigationViewController范围之外的其他操作。
我希望能够点击Make并打开并显示一个新的导航控制器。
来自ViewController.m:
-(IBAction)makeStory:(id)sender{
NSLog(@"makeStory:");
navController = [[UINavigationController alloc] init];
makeStoryTableViewController = [[MakeStoryTableViewController alloc] initWithNibName:@"MakeStoryTableViewController" bundle:nil];
[navController pushViewController:makeStoryTableViewController animated:YES];
}
我在打开的ViewController.h文件中创建了一个NavigationViewController:
#import <UIKit/UIKit.h>
#import "MakeStoryTableViewController.h"
@interface StoryBotViewController : UIViewController {
UINavigationController *navController;
MakeStoryTableViewController *makeStoryTableViewController;
}
- (IBAction)makeStory:(id)sender;
@end
我知道我错过了一些东西,因为当我调用pushViewController时没有任何反应 - 我认为我必须将NavigationViewController附加到makeStory的ViewController中。
作为参考,我的app delegate头在@implementation中声明了视图控制器,如下所示:
UIWindow *window;
StoryBotViewController *viewController;
在app delegate的.m中使用相应的@synthesize
@synthesize window;
@synthesize viewController;
如何从打开的视图控制器上启动NavigationStack? 如果问题有点模糊,请原谅我,如果您需要,我很乐意提供更多信息。这是我第一次质疑stackoverflow,我显然是iPhone SDK的新手。
答案 0 :(得分:1)
[self.view addSubview:navController.view];
在您的IBAction中添加此项。
修改强>
但很可能这不是你想要的,因为你无法导航回你的第一个viewController。如果要导航回第一个viewController,请在基于导航的模板中设置项目。您可以通过以编程方式执行此操作:
将所有UINavigationController内容从viewcontroller的头文件移动到app delegate头。并将您的应用委托代理实施更改为以下内容:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
navController = [[UINavigationController alloc] initWithRootViewController:viewController];
// Add the view controller's view to the window and display.
// [window addSubview:viewController.view];
[window addSubview:navController.view];
[window makeKeyAndVisible];
return YES;
}
确保在dealloc
中发布navController然后用这样的东西替换你的IBAction:
- (IBAction)makeStory:(id)sender {
makeStoryTableViewController = [[MakeStoryTableViewController alloc] initWithNibName:@"MakeStoryTableViewController" bundle:nil];
[self.navigationController pushViewController:makeStoryTableViewController animated:YES];
}
如果您不想在第一个viewcontroller中显示导航栏,请隐藏它,但如果您在堆栈上推送其他项目,请确保取消隐藏它。 self.navigationController.navigationBar.hidden = ...