如何在Swift中切换视图控制器?

18

我正在尝试使用代码从一个UIViewController切换到另一个。目前我有:

self.presentViewController(ResultViewController(), animated: true, completion: nil)

这只是让我进入了一个黑屏,而不是ResultViewController。有什么建议吗?

8个回答

24

使用Storyboard。为第二个视图控制器创建一个Swift文件(SecondViewController.swift),并在适当的函数中输入以下内容:

let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "secondViewController") as! secondViewController

self.navigationController.pushViewController(secondViewController, animated: true)

没有故事板

let secondViewController = ViewController(nibNameOrNil: NibName, bundleOrNil: nil)
self.presentViewController(secondViewController, animated: true, completion: nil)

3
我不希望它启动一个新的intent活动;我只需要它直接切换视图,因为我在开始时有一段介绍性文本,永远不需要再显示出来,我不希望用户能够“返回”到它。因此,需要永久性地用表格视图替换它。 - pete
1
NibName是什么? - Andremoniy

8
你可以尝试这个。
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

let resultViewController = storyBoard.instantiateViewControllerWithIdentifier("ResultView") as ResultViewController

self.presentViewController(resultViewController, animated:true, completion:nil)

请确保您设置了视图控制器标识符。

我不想启动一个新的意图活动;我只需要它真正地切换视图,因为我在开头有一个介绍文本,永远不需要再次显示,并且我不希望他们能够“返回”到它。因此,它需要被表视图永久替换。 - pete
如果您希望在切换到结果视图时重新加载它,该怎么做? - John

4

Swift 3

以模态方式呈现控制器

let vc = self.storyboard!.instantiateWithIdentifier("SecondViewController")
self.present(vc, animate: true, completion: nil)

展示控制器
self.show(vc, sender: self)

2
最简单的方法是通过右键单击开始视图并将蓝色线拖动到结果视图控制器,然后选择show segue选项创建segue。然后将segue的标识符设置为“segue”。现在在您的视图控制器中任何位置添加以下代码:
self.performSegueWithIdentifier("segue", sender: nil)

这将触发转场,跳转到你的resultViewController。

2

试试这个:

let vc = ViewController(nibNameOrNil: yourNibName, bundleOrNil: nil)
self.presentViewController(vc, animated: true, completion: nil)

希望这可以帮到您.. :)

2
你应该添加一些解释说明为什么这个方法可以解决问题。另外,如果 OP 正在使用故事板(storyboards),会怎样呢? - Mick MacCallum

0
Shaba的回答是一个不错的开始,但需要以下步骤才能在您的视图控制器中控制segue:
override func shouldPerformSegue(withIdentifier identifier: String, 
              sender: Any?) -> Bool {    
 // your code here    
 // return true to execute the segue    
 // return false to cause the segue to gracefully fail  } 

源代码


0
在iOS中切换屏幕最简单的方法是:在当前屏幕上添加一个按钮,然后按住控制键并将按钮拖到目标屏幕,选择“push”。当您点击该按钮时,屏幕将切换到目标屏幕。请确保使用UINavigationViewController。
来源:ios UINavigationController教程

0

vc = YourViewController()

UIApplication.shared.keyWindow?.rootViewController = vc

或者

vc = YourViewController()

UIApplication.shared.keyWindow?.rootViewController = UINavigationController(rootViewController: vc) //如果您想要为该VC添加导航功能


这对你来说可能很明显,但你能详细说明一下吗? - loa_in_
vc = YourViewCotroller() //你想要导航到的视图控制器 - Hussein
UIApplication.shared.keyWindow //在这里,您告诉编译器您想通过代码处理根/主窗口,然后您将键入.rootViewController //表示您要将其作为启动/目标视图控制器的ViewController - Hussein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接