【问题标题】:Getting Extra argument 'animated' in call在通话中获得额外的参数“动画”
【发布时间】:2014-11-03 02:46:03
【问题描述】:

当我尝试以编程方式转到另一个故事板时,我使用

//Pop user to next screen
let storyboard = UIStoryboard(name: "HomeViewController", bundle: nil);
let vc = storyboard.instantiateViewControllerWithIdentifier("home") as UIViewController;
self.presentViewController(vc, animated: true, completion: nil);

但这并没有在下一个故事板上显示导航控制器。所以我做到了

HomeViewController.presentViewController(vc, animated: true, completion: nil);

所有抛出的都是

调用中的额外参数“动画”

有什么想法吗?

【问题讨论】:

    标签: ios xcode swift


    【解决方案1】:

    关于您的第一个问题的几点意见:

    • 对于第一个问题,您可能需要确保 vc 不是 nil(例如,找到情节提要 ID 为 home 的场景):

      if let vc = storyboard.instantiateViewControllerWithIdentifier("home") as? UIViewController {
          presentViewController(vc, animated: true, completion: nil)
      } else {
          println("home not found")
      }
      
    • 我建议您仔细检查“home”场景的“Storyboard id”的拼写和大小写。

    • 顺便说一句,如果您在 IB 中为第二个故事板中的第一个场景选中了“是初始视图控制器”复选框,那么您也可以这样做:

      let vc = storyboard.instantiateInitialViewController()
      

      您可以直观地确认此设置,因为场景将有一个小的“初始转场”箭头从左侧指向它:

    • 如果您正在对目标场景执行presentViewController,该场景本身就是嵌入在导航控制器中的,那么您应该呈现该导航控制器(即为导航控制器的场景提供“故事板 ID”或将其指定为“是初始视图控制器”),而不是嵌入在该导航控制器中的场景。

    关于您的第二个错误,那是因为您正在调用实例方法presentViewController,但引用的可能是类名HomeViewController,而不是实例。这种语法根本没有任何意义。

    self.presentViewController(...) 的前一种语法可能是正确的,但很可能没有找到故事板或场景,要么是因为其中一个或另一个的名称(很可能是场景的“故事板 ID”),要么是因为记分板是未包含在捆绑包中(尽管我认为这会产生不同的错误)。

    【讨论】:

    • 好吧,如果我将标签拖到下一个视图控制器中,我可以看到它。只是导航控制器没有显示。
    • 您必须为该导航控制器提供其自己的唯一故事板 ID,并在您的代码中引用 that,(或者,对于导航控制器的场景,请检查“是初始视图控制器”复选框,然后使用instantiateInitialViewController 语法)。
    • 这就是我使用第二行的目的。我已经将界面生成器中的情节提要 ID 设置为 home
    • 您指定的故事板 ID 不是在您刚刚添加标签的场景中,而是在该场景之前的导航控制器场景中,对吧?
    • 好了!我将它添加到视图而不是视图控制器。谢谢吨,我花了几个小时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    相关资源
    最近更新 更多