【问题标题】:How to prevent segue back upon tapping screen如何在点击屏幕时防止转回
【发布时间】:2018-10-15 19:18:32
【问题描述】:

当我点击屏幕时,如何防止 Xcode 执行转回前一个视图控制器/屏幕。

当我单击视图控制器/屏幕上的任意位置时,它会将我返回到之前查看的视图控制器/屏幕。

我已经在模拟器和真 iPhone 上进行了测试,它做同样的事情。此外,我已经通过删除 Xcode 中的所有 segue 对此进行了测试,如果我单击任意位置,它仍然会将我返回到上一个屏幕。

[使用代码更新]

查看控制器 #1:

import UIKit

class FirstViewController: UIViewController {

    // Button
    @IBAction func btn(_ sender: Any) {
        performSegue(withIdentifier: "SecondView", sender: self)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

然后从 View Controller #1 添加到 View Controller #2 的 segue - 一个带有“SecondView”标识符的当前模态。

查看控制器 #2:

import UIKit

class SecondViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

【问题讨论】:

  • 您没有提供足够的信息。你如何展示第二个视图控制器?以模态方式呈现它?你在使用弹出框吗?您所描述的行为不正常,因此如果您希望我们为您提供帮助,您需要提供更多信息。
  • 是的,以模态方式呈现第二个视图控制器。不是弹出窗口。我只是在创建一个视图控制器。然后到第一个视图控制器,我添加一个按钮并为该按钮添加一个动作触发器,以模态方式呈现第二个视图控制器。然后第二个视图控制器是空白的。上面什么都没有...如果我单击该视图/屏幕上的任何位置,它会将我发送回第一个视图控制器。
  • 如果您在文档大纲窗格打开的情况下发布一些情节提要的屏幕截图,那就太好了。所以我们可以看到这些视图中的确切内容。

标签: ios swift xcode ios-simulator


【解决方案1】:

我找到了我的问题的答案...

答案如下:

 private func removePartialCurlTap() {
  if let gestures = self.view.gestureRecognizers as? [UIGestureRecognizer] {
    for gesture in gestures {
      self.view.removeGestureRecognizer(gesture)
    }
  }
}

override func viewDidAppear(_ animated: Bool) {
  super.viewDidAppear(animated)
  removePartialCurlTap()
}

问题似乎是用于 Seque 的过渡,特别是在使用“部分卷曲”时,您会遇到此问题。我猜这是 Xcode / iOS 中的一个错误,或者没有很好地记录,如果你使用那个特定的转换,你需要基本上删除 GestureRecognizer 以便用户在他们简单地点击某人时不会被送回上一个屏幕屏幕。

感谢Anton Rodzik 在此处发布对此的答案:How to disable auto segue back to main screen in Xcode?

【讨论】:

    【解决方案2】:

    您似乎有一个全屏 UIButtonUIGestureRecogniser 触发 dismiss(animated: Bool) 或展开转场。

    请分享您的代码。

    【讨论】:

    • 不,没有全屏按钮。当我在情节提要中创建一个新的 ViewControl 时会发生这种情况,即使屏幕是空白的。
    • 您的代码会因为类 ViewDogViewController 的无效重新声明而出错
    • 好的,我已经解决了这个问题,但问题仍然存在。
    【解决方案3】:

    我不知道你的详细代码,只提供一种方法,使用 EventTouch 或 UITapGestureRecognizer 可以做到,在 View Controller #2 中: EventTouch

    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
           dismiss(animated: Bool)
    }
    

    UITapGestureRecognizer

    func handleTap(sender: UITapGestureRecognizer) {
       if sender.state == .ended {
        // handling code
        dismiss(animated: Bool)
       }
    }
    

    希望能帮到你。

    【讨论】:

    • 这似乎没有帮助......如果我尝试其中任何一个,我都会收到错误消息。不过谢谢你的建议。
    【解决方案4】:

    您好首先动画是如何发生的,我的意思是过渡效果,如果是从上到下,则关闭正在触发, 出于调试目的尝试查看交互启用为 false 并将结果作为回复发布

    【讨论】:

      猜你喜欢
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      相关资源
      最近更新 更多