IOS打开另一个视图控制器按钮单击无法使用故事板

时间:2013-11-14 09:39:20

标签: ios objective-c uinavigationcontroller storyboard

我在按钮上打开另一个viewcontroller时遇到了一个愚蠢的问题。

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

  • 代码
  • 在故事板上本身

这两种方法对我都不起作用。 首先是故事板的问题:

enter image description here

我已将mainViewController与navigationController连接,并且我已将我的按钮与我的下一个视图连接(用于添加项目)。但是,当我运行该程序时,我收到以下错误:

'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'

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

5 个答案:

答案 0 :(得分:2)

您的导航控制器不是初始视图控制器。在故事板上选择导航控制器,进入属性检查器并选择"是初始视图控制器"。

答案 1 :(得分:0)

制作导航控制器初始视图控制器。

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

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

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

更新: 还有更多选择:

  1. 如果您的初始视图控制器是tabbar:将segue从其中一个标签添加到包含视图控制器的导航控制器。

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

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

  4. 希望它会有所帮助:)

答案 2 :(得分:0)

您必须将导航控制器设置为第一个控制器enter image description here

在导航控制器之前看到故事板的起始箭头

答案 3 :(得分: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 

答案 4 :(得分:-2)

使用IBAction方法而不是

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

使用此代码并检查

[self.navigationController pushViewController:addinvController animated:YES];