在 Xcode 中执行 segue 后如何关闭视图控制器?

Posted

技术标签:

【中文标题】在 Xcode 中执行 segue 后如何关闭视图控制器?【英文标题】:How to close a View Controller after Performing segue in Xcode? 【发布时间】:2020-11-10 05:46:55 【问题描述】:

我的故事板看起来像这样:-

Main View Controller -> Game View Controller -> Game Result View Controller

我执行了从 Main V.C 到 Game V.C 的模态转场。现在,当我从 Game V.C. 执行模态转场时。游戏结果 V.C.,游戏 V.C.没有关闭,因为游戏 V.C.检测是否开始触摸,当它检测到 Game V.C. 之外的触摸时会崩溃。在对 Game Result V.C. 执行模态转场之后我没有使用导航视图控制器。任何人都可以帮助我在对 Game Result V.C. 执行模态 segue 后如何关闭 Game V.C.?感谢您的帮助!谢谢:)

**Game V.C.** 

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) 
  // First touch to start the game
  if gameState == .ready 
    startGame()
  
  
  if let touchLocation = event?.allTouches?.first?.location(in: self.view) 
    // Move the player to the new position
    movePlayer(to: touchLocation)
    
    // Move all enemies to the new position to trace the player
    moveEnemies(to: touchLocation)
  



func gameOver() 
    stopGame()
    performSegue(withIdentifier: "2to3segue", sender: self)

【问题讨论】:

【参考方案1】:

一些提示:

方法一

您可以使用 Tap 控制器,让情节提要如下所示

主视图控制器 -> (tab-1) 游戏视图控制器 \ -> (tab-2) 游戏结果视图控制器

Hide tab bar,按程序换tab。

我建议使用method 1

方法二

关闭Game View Controller没有动画。然后呈现Game Result View ControllerWITH动画。

但是,我记得method 2 有一些问题。之前用过,现在终于用method 1了。

 // Example:
 // Two or more animations will produce problem.
 v2.dismiss(animated: false, completion: nil);
 v.present(v3, animated: true, completion: nil);

【讨论】:

感谢您的回答!您能否提供任何其他解决方案而不是使用标签栏控制器?谢谢:) 嗯,如果你不想使用标签栏控制器,你可以试试Method 2。但我记得Method 2 有一些用户界面问题。【参考方案2】:
First dismiss the "v2" view controller and in completion block present "v3" view controller

v2.dismiss(animated: false, completion: 
  v.present(v3, animated: true, completion: nil)
)

or

if v2 is your presented view controller then :

self.presentedViewController.dismiss(animated: false, completion: 
     v.present(v3, animated: true, completion: nil)
 )

【讨论】:

以上是关于在 Xcode 中执行 segue 后如何关闭视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 中展开 segue

在表格视图中选择项目后无法关闭弹出框

使用 segue 向后导航时如何重新加载容器视图?

XCode 6项目在ios 7.1上segue后崩溃

Xcode 显示加载视图,直到第二个视图加载(在 segue 节目中)

如何关闭容器视图