2

我的项目的当前版本:

我的应用程序中有 5 个不同UIViewControllers。我已将我设置 FirstViewControllerInitial View Controller使用属性检查器。我使用 StoryBoard 使用分配模态序列的按钮从一个 ViewController 到另一个 ViewController 来回移动,从一个 ViewController 到另一个

我想改变的:

我想显然保留导航按钮,删除模态序列并改用 a UINavigationController。如果我正确理解了这个概念,那么在使用 a 时,UINavigationController我需要进入每个 UIButton-IBAction方法,并且在方法的最后,我必须将要移动到的下一个 ViewController 推到我的 NavigationController 上(我是否还必须弹出当前的第一的?)。但是,我无法弄清楚如何正确实现所有这些。

到目前为止我所做的:

  • 我从情节提要中删除了所有模态序列,并保留了导航按钮及其相应的 IBActions
  • 我取消选中了属性检查器中使我的 FirstViewController 成为我的应用程序的初始视图控制器的框
  • 我进入我的AppDelegate.m并尝试在那里创建导航控制器并使我的 FirstViewController 成为 RootViewController

MyAppDelegate.m

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UIViewController *myFirstViewController = [[FirstViewController alloc] init];
    UINavigationController *myNavigationController = [[UINavigationController alloc] initWithRootViewController:myFirstViewController];

    [myNavigationController pushViewController:myFirstViewController animated:YES];

    // Override point for customization after application launch.

    return YES;
}
  • 然后,我尝试通过进入我的 FirstViewController 上导航按钮的 IBAction 来测试上述是否有效,并实现了以下操作,以便在按下按钮时移动到我的 SecondViewController:

第一视图控制器.m

- (IBAction)goRightButton:(UIButton *)sender
{
    // some code drawing the ButtonIsPressed UIImageView on the current View Controller

    UIViewController *mySecondViewController = [[SecondViewController alloc] init];
    [self.navigationController pushViewController:mySecondViewController animated:YES];
}

但什么也没发生。我究竟做错了什么 ?

4

2 回答 2

2

您没有链接您的 XIB 文件。请将您的导航控制器添加为

UIViewController *myFirstViewController = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
navigationController = [[UINavigationController alloc] initWithRootViewController:myFirstViewController];

使用以下代码从一个视图移动到另一个视图

UIViewController *mySecondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self.navigationController pushViewController:mySecondViewController animated:YES];
于 2012-09-05T12:44:31.563 回答
0

如果您使用的是故事板,您只需将导航控制器拖入那里并将其连接到您的应用程序委托。只要它是主故事板,并且您已确定要首先加载的视图控制器,您就不需要在应用程序委托中加载任何视图。

为了以编程方式推送故事板中的视图,您需要执行以下操作:

 //bundle can be nil if in main bundle, which is default
 UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
 MyCustomViewController *customVC = (MyCustomViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"customVC"];
//standard way
[self.navigationController pushViewController:customVC animated:YES];

//custom animation
[UIView transitionWithView:self.navigationController.view duration:0.5 options:UIViewAnimationOptionTransitionCurlUp animations:^{
    [self.navigationController pushViewController:customVC animated:NO];
} completion:nil];

您可以使用在故事板编辑器中添加的标识符来标识视图控制器。下面是一些屏幕截图,以帮助说明我的意思。

带箭头的导航控制器指示初始负载

更改视图控制器标识符的地方,因此您可以调用它

于 2012-09-05T13:31:14.503 回答