如何从嵌入在不同UINavigationControllers

时间:2016-10-02 17:39:45

标签: ios swift uiviewcontroller segue

在我的举重应用程序中,我有一个视图控制器,我想用于几个不同的目的。一种是选择将保存为用户默认值的电梯类型。另一种是选择一种电梯类型,用于按电梯类型过滤用户电梯的日志。

其中一条路径(选择默认值)从“设置”屏幕开始。当您点击UITableViewCell转到选择一个提升屏幕时,视图会按预期从右向左滑动,然而,它会立即从右向左再次滑动视图,导航栏指向回到,好吧,本身:

enter image description here

这是我的故事板布局:

enter image description here

以下是相关的segue代码:

// MARK: - Segues

  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "goToLifts" {
            let vc = segue.destinationViewController as! LiftSelectionTableViewController
            vc.delegate = self
        } else {
            return
        }
    }

  override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath:NSIndexPath) {
    switch indexPath.row {
    case 0: performSegueWithIdentifier("goToFormulas", sender: self)
    break
    case 1: performSegueWithIdentifier("goToLifts", sender: self)
    break
    default:
      break

    }
  }

我使用的是Swift 2.3和Xcode 8。

我已经阅读了Apple的文档,并发现了几个涉及多个vc进入一个vc的主题,但他们要么处理传递数据问题或其他事情。< / p>

有人可以告诉我为什么会这样,以及如何解决它?

更新

进行@vacaWama建议的更改,现在它从底部显示,没有导航栏:

enter image description here

更新2:

.storyboard源代码超出了限制,所以这里是GitHub上的链接:

Link to storyboard file

1 个答案:

答案 0 :(得分:0)

我怀疑你是从原型单元连接你的segue,因此当你选择单元格时它会被触发,而当你调用performSegueWithIdentifier时它会被触发。如果要以编程方式调用segue,请从tableViewController顶部的viewController图标连接它。

  

@vacawama,你怀疑是正确的。   视图现在呈现模态,没有导航栏(参见我的   编辑的问题)。在“设置”屏幕中,我希望它从中滑入   从右到左,但是从日志屏幕我希望它以模态呈现   从底部。我尝试将segue连接到导航控制器   它嵌入了,但没有什么区别。你知道我怎么样   可以解决这个问题吗?

您需要在故事板中选择segue箭头,然后将Attributes Inspector中的segue类型更改为 Show

如果我直接使用显示 segue Select a lift type,它会从右向左推送。如果我使用显示 segue到Navigation controller,它会以模态方式呈现。重新连接你的segue并确保它直接转到viewController而不是Navigation controller