【问题标题】:Segue To Same View Controller Programmatically?以编程方式转到同一视图控制器?
【发布时间】:2015-10-01 16:48:10
【问题描述】:

有没有办法在 Swift 中使用同一个视图控制器?在 Objective-C 中有一个 answer 用于此,但我无法将其转换为 Swift

更新:我能够推送到同一个视图控制器,但它立即出错,因为它无法识别在情节提要上创建的对象

let aViewController:myVC = myVC()
self.navigationController!.pushViewController(aViewController, animated:false)

在加载新的(相同的)视图控制器时,它在第一行出错:

myText.editable = false;

【问题讨论】:

  • 试试self.viewDidLoad(),它会自动重新加载相同的viewcontroller
  • @Anbu.Karthik 他们是我在再次调用负载时可以传递参数的一种方式吗?我最初使用 prepareforsegue 加载此视图并传递参数
  • 如果你使用这个概念,总 viewcontroller 分配内存,这里使用 NSUserDefault,否则使用本地 DB 值
  • @Anbu.Karthik 我注意到如果我使用这种方法,每次调用 viewdidload 后我的内存使用量都会继续翻倍。然后打开不同的viewcontroller后内存下降到正常使用
  • 可以@DevTonio 你能删除我的回答的UPvote

标签: ios swift


【解决方案1】:

在情节提要中为您的 UIViewController 设置标识符。然后使用我的标识符实例化它:

let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "someViewController")

如果要设置变量,请确保转换 vc。此示例将帮助您了解您在同一控制器上的深度:

let vc = storyboard.instantiateViewController(withIdentifier: "rootViewController") as! MyRootViewController
vc.level = self.level + 1

【讨论】:

  • @Anbu.Karthik OP 在哪里这样做:let aViewController:myVC = myVC()
  • @Rage 谢谢!这正是我想要的
【解决方案2】:

我在 swift 方面做的不多,但看看那个答案,使用 self.navigationController?.pushViewController(viewController, animated:true) 应该可以工作。

【讨论】:

  • doesn't work 收到此错误:*** 由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'不支持多次推送同一个视图控制器实例
  • 您不能推送同一个实例(即self) - 您需要从情节提要中实例化一个新实例
  • @Paulw11 谢谢,我让它推送到同一个视图控制器,但它立即出错,因为它无法识别最初在情节提要上创建的对象。说没有?例如,我将 textview.editable 设置为 false 并且由于可选的 nil 而出错
  • 你是如何创建新实例的?
  • 谢谢,self.navigationController.pushViewController(vc, animated: true) 正是实例化视图控制器后为我所做的。
【解决方案3】:

首先,您将用于重新加载的按钮与 ViewController 连接,并为 segue 标识符命名(例如“yourIdentifier”)

那么你需要使用:

override func prepare(for segue: UIStoryboardSegue, sender: Any?){
if segue.identifier == "yourIdentifier"{
self.viewDidLoad()
}

这应该会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多