【问题标题】:Push view to navigation from modal of another tab将视图从另一个选项卡的模式推送到导航
【发布时间】:2015-06-16 22:17:32
【问题描述】:

我对 iOS 编程很陌生,我正在尝试做一些我认为很简单但我找不到明确解释的事情。 我正在尝试使用 Xcode 6.3 和 swift 1.2 开发应用程序

我有这个:

所以我在一个基于标签的应用程序中。每个选项卡视图都在导航控制器内。 DC 的模态启动。当我点击 D 内的按钮时,我想转到 B。这可以。但我还想显示顶部导航栏,并带有指向 A 的后退按钮。 目前,当我尝试使用从 DB 的 push segue 时,B 显示为模态但不是导航控制器的一部分。

我必须如何轻松实现这一目标?我是否必须通过实例化每个视图(A 然后 B)重新创建所有堆栈并将所有内容推送到导航堆栈上?

如果你知道在 Objective-c 中实现这一目标的代码,那对我来说也很好。

【问题讨论】:

    标签: ios iphone swift uinavigationcontroller uistoryboardsegue


    【解决方案1】:

    这是 nburk 使用故事板快速转换的解决方案:

    let a = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("aIdentifier") as! ATableViewController
    let nav = UINavigationController(rootViewController: a)
    let b = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("bIdentifier") as! BViewController
    // b parameters here
    // b.parameter1 = variable
    nav.pushViewController(b, animated:false)
    self.presentViewController(nav, animated:true, completion:nil)
    

    其中 aIdentifier 和 bIdentifier 是您在情节提要编辑器中为每个视图设置的标识符,而 ATableViewController 和 BViewController 是它们各自的 ViewController 类。

    【讨论】:

      【解决方案2】:

      当我点击 D 内的按钮时,我想转到 B。这可以。但我还想显示顶部导航栏,并带有指向 A 的后退按钮。

      您只能返回A,前提是它实际上在导航堆栈上。因此,您必须以某种方式将其推入堆栈,然后才能实现目标。

      作为一般提示,如果您希望视图控制器显示导航栏,您只需确保它嵌入到导航控制器中。当您以模态方式呈现视图时,默认情况下它不会嵌入到导航控制器中。因此,正如您所说,DC 模态显示,只需将 D 嵌入到另一个导航控制器中,而不是制作 D 模态转场的目的地,将导航控制器设为目的地。

      更新

      如果您想在 B 中显示一个指向 A 的后退按钮,即使 BB 模态显示strong>D,您将不得不绕道而行,因为 A 不在导航堆栈上。因此,从逻辑上讲,您要做的就是确保 A 在导航堆栈上就在 B 之前。我认为您不能简单地使用 IB 的 segues 来做到这一点,而是使用代码并自己实例化 UINavigationController

      - (void)showBModallyWithBackButtonToA
      {
          A *a = [[A alloc] init];
          UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:a];
          B *b = [[B alloc] init];
          [nav pushViewController:b animated:NO];
          [self presentViewController:nav animated:YES completion:nil];
      }
      

      如果我正确理解您的设置,此代码必须从 D 执行。

      【讨论】:

      • 感谢 nburk 的回答,但我不清楚。如果我这样做,导航栏中的 B 后退按钮将指向 D 而不是 A no ?
      • 后退按钮 总是 如果您使用 push segue,则指向上一个视图控制器,这是您无法更改的默认行为。 modal segues 没有任何后退按钮,在这里,您作为开发人员负责为用户提供执行任何操作的可能性(例如关闭模态视图)
      • 是的,但这并不能解决我的问题。我想要实现的是在我从 D 加载 B 时设置一个指向 A 的后退按钮。
      猜你喜欢
      • 2017-01-15
      • 1970-01-01
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      相关资源
      最近更新 更多