1

我在单击按钮时打开另一个视图控制器时遇到了一个愚蠢的问题。

在我的故事板上的视图控制器上,我有一个按钮。当用户单击此按钮时,应打开一个新的视图控制器。据我所知,有两种方法可以做到这一点。

  • 在代码中
  • 在故事板本身

这两种方法都不适合我。首先是故事板的问题:

在此处输入图像描述
(来源:livefilestore.com

我已将我的 mainViewController 与一个导航控制器连接起来,并且我已将我的按钮与我的下一个视图(用于添加项目)连接起来。但是,当我运行程序时,出现以下错误:

'NSGenericException', reason: 'Push segues can only be used when the source controller is managed by an instance of UINavigationController.'

我真的不明白这个错误,因为 mainviewcontroller 是由 UINavigationController 管理的。因此,由于这不起作用,我尝试在代码中处理它。我将 buttonclick 操作连接到 mainViewController.h 文件并在 .m 文件中实现它。

这是用户单击按钮时的操作方法:

- (IBAction)actionBtnAdd:(id)sender {
    AddInventoryViewController *addinvController = [self.storyboard instantiateViewControllerWithIdentifier:@"AddInventoryViewController"];
    [self presentViewController:addinvController animated:NO completion:nil];
}

另一个viewcontroller在同一个storyboard中,另一个viewcontroller的ID是“AddInventoryViewController”。这给了我以下错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'

有谁知道问题吗?解决这个问题的最佳方法是什么?

4

5 回答 5

2

您的导航控制器不是初始视图控制器。在情节提要上选择您的导航控制器,进入属性检查器并选择“是初始视图控制器”。

于 2013-11-14T09:53:13.700 回答
0

使您的导航控制器成为初始视图控制器。

然后创建一个从按钮到目标控制器的 push-segue。

然后你可以在推送前使用以下方法进行一些调整:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"TargetSegue"]) {
        TargetViewController *vc = segue.destinationViewController;
        //vc.items = nil;
    }
}

更新:还有更多选择:

  1. 如果您的初始视图控制器是选项卡栏:将选项卡之一的 segue 添加到包含您的视图控制器的导航控制器。

  2. 如果您的初始视图控制器是另一个导航控制器:删除包含您的视图控制器的导航控制器。然后在thirdViewController 和显示它的源之间添加segue。您可以在按钮和目标视图控制器之间使用 push segue。

  3. 如果您想以编程方式执行此操作:删除包含您的视图控制器的导航控制器。从您当前呈现的导航控制器推送第三个视图控制器。从 buttonAction 推送 targetViewController。

希望它会有所帮助:)

于 2013-11-14T10:04:31.343 回答
0

您必须将导航控制器设置为第一个控制器在此处输入图像描述

见导航控制器之前有故事板开始箭头

于 2013-11-14T10:23:52.837 回答
0
In your Xcode .Click the storyboard on the left side and on top select Editor->EmbedIn->Navigation controller .It will automatically add your navigation controller to the first view controller .Then it would work 
于 2013-11-14T10:31:24.813 回答
-2

根据您的IBAction方法而不是使用

  [self presentViewController:addinvController animated:NO completion:nil];

使用此代码并检查

[self.navigationController pushViewController:addinvController animated:YES];
于 2013-11-14T09:51:53.587 回答