【问题标题】:How to segue to view controller on panGesture如何在 panGesture 上继续查看控制器
【发布时间】:2016-08-29 11:25:36
【问题描述】:

我正在尝试使用视图控制器。 segue 的标识符是“橙色”(另一个视图控制器只是一个橙色视图)。视图控制器通过故事板连接并连接到我的主视图控制器中的图像视图。 我想用平移手势识别器触发它。因此,当检测到平移时,它只会转到视图控制器。

这是我的尝试:

@IBOutlet var panGesture: UIPanGestureRecognizer!

@IBAction func onPan(sender: UIPanGestureRecognizer) {
    if panGesture.state == .Ended {
        print("panned")
    performSegueWithIdentifier("Orange", sender: sender)
    }
}

但是,这不起作用。我知道它确实检测到了锅,但它不执行 segue。

我从IOS - How to segue programmatically using swift 阅读了如何呈现segue

【问题讨论】:

  • if panGesture.state == .Ended 工作了吗?
  • @Mr.UB 是的,我被平移打印出来了。
  • 您在哪里注册 panGesture 与操作 onPan?
  • 试着把selfself.performSegue... 一样,胡乱猜测。
  • 自我。 performSegueWithIdentifier("Orange", sender: sender)

标签: ios swift segue


【解决方案1】:

尝试通过实例化呈现 ViewController:-

  • 确保您的第一个 VC 中嵌入了导航控制器

  • 给你的 ViewController 一个 StoryBoardID:- 在你的 Storyboard 中选择你想要展示的 ViewController -> Identity Inspector -> StoryBoard ID 给你的 VC 一个故事板 ID 让我们说:"vc2SceneVC_ID"

  • 像这样实例化并推送 VC:-

    @IBAction func onPan(sender: UIPanGestureRecognizer) {
    
    if panGesture.state == .Ended {
    print("panned")
    
     let vc2Scene = self.storyboard?.instantiateViewControllerWithIdentifier("vc2SceneVC_ID") as! VC2
     self.navigationController?.pushViewController(vc2Scene, animated: true)
    
    }
    

导航控制器的 Apple 文档:- UINavigationController Apple Doc

PS:- 更喜欢通过 ViewControllers 实例化导航而不是 performSegueWithIdentifier("Orange", sender: sender) 因为通过这种方式您可以在这些视图控制器之间来回传输数据,所以在大多数情况下也可以防止内存泄漏。

【讨论】:

  • 谢谢!这行得通,但知道为什么我必须嵌入导航控制器吗?
  • Navigation Controller 就像一个梭子座(顶部和底部都打开),你可以推送和弹出一个 VC,但 VC 需要知道它在索引中的位置,基本上一个导航控制器会维护视图控制器堆栈。
  • @Marcel 你不必使用导航控制器来做到这一点
  • @AbdulRehmanWarraich 那么你将如何从视图层次结构中推送或弹出 VC?
【解决方案2】:

第 1 步:从第一个 ViewController 中按住 Control+单击(其中显示了 View Controller 实验室)并拖动到第二个 ViewController

第二步:选择segue的类型

第三步:选择segue并设置标识符

您需要在哪里执行 segue 只需致电 self.performSegueWithIdentifier("test", sender: nil)

抱歉英语不好

【讨论】:

  • 在你的情况下,在 print("panned") 之后调用 segue
  • 这与 OP 发布的内容没有什么不同。请在发布答案之前清楚地阅读问题。:)
  • @Dravidian 好的,感谢您的更正。
【解决方案3】:

Orange 必须是情节提要中的 segue 标识符,而不是视图控制器标识符。

如果您的 segue 标识符设置正确,请尝试测试您的手势回调是否在主线程中。

在 cmets 中告诉我你有问题。

【讨论】:

  • 抱歉我的措辞不好,Segue 的标识符是“Orange”
  • @Marcel 尝试在发件人中设置 nil,或者自己
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多