【问题标题】:How to create multiple segues from code for a VC in a Storyboard如何在 Storyboard 中为 VC 的代码创建多个 segue
【发布时间】:2013-12-31 18:18:39
【问题描述】:

我的故事板上有一个 VC,我想以模态方式展示它或将它推送到导航堆栈上,具体取决于它的调用方式/位置。

根据我的阅读,我应该使用[UIStoryboardSegue segueWithIdentifier:source:destination:performHandler:] 类方法来创建这个segue。但是,当我这样称呼它时:

    manage_friends = App.delegate.storyboard
      .instantiateViewControllerWithIdentifier('ManageFriends');

    # segueWithIdentifier(NSString* identifier, source:UIViewController* source, destination:UIViewController* destination, performHandler:void (^)(void) performHandler)
    UIStoryboardSegue.segueWithIdentifier(
     'ManageFriendsPush',
      source: self,
      destination: manage_friends,
      performHandler: -> {
        pushViewController(manage_friends, animated: true)
      }
    )

我收到一个错误“嵌套推送动画可能导致导航栏损坏”,所以我不确定我是否正确执行此操作。

还有其他方法可以创建推送转场和模态转场吗?

【问题讨论】:

  • 我意识到我可以在 Storyboard 中创建这些 segue,然后使用 performSegueWithIdentifier:sender: 调用它们,但这可维护性要差得多。有很多地方我会使用这个 VC 作为模态,并且希望有一个 Segue 实例可以依赖。
  • 你有pushViewController的方法吗?也分享一下,并用 amitmated 尝试一次:NO

标签: ios storyboard segue rubymotion


【解决方案1】:

你做得不对。 segueWithIdentifier:source:destination:performHandler: 方法使用您在 IB 中创建它时使用的标识符从情节提要中加载已定义的 segue。它不会创建新的转场。

我不认为 Apple 打算让开发人员在代码中创建 segue。

您可以使用 instantiateViewControllerWithIdentifier: 从情节提要中加载目标场景,然后在该目标视图控制器上执行推送或呈现。

我经常想知道您是否可以使用 alloc 创建一个新的 segue,然后使用 initWithIdentifier:source:destination,但从未尝试过。

【讨论】:

  • 感谢您澄清此方法,但我仍然对为什么有源视图控制器和目标视图控制器的参数感到困惑。那些不是天生就设置在segue中的吗?此外,它位于文档中的“创建自定义 Segue”下。 identifier 属性似乎被用来根据它的描述命名segue。
猜你喜欢
  • 1970-01-01
  • 2012-03-10
  • 2017-06-21
  • 2012-05-16
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多