【问题标题】:how can i use the same UIViewController on storyboard while replacing old one我如何在故事板上使用相同的 UIViewController 来替换旧的
【发布时间】:2016-10-20 18:51:05
【问题描述】:

我正在编写游戏。这是一个文字游戏。 游戏页面始终相同,内容不同。 当我使用 instantiateViewControllerWithIdentifier("SB") 时,新页面被添加到队列中。但是这样使用的内存就会变高。

如何用新页面替换旧页面?

【问题讨论】:

    标签: ios swift uiviewcontroller storyboard


    【解决方案1】:

    您可以保留对类的引用,并在其中有一个方法来加载其中的内容。

    class gameViewController : UIViewController {
    
       func loadContent() {
          //  this method should refresh content everytime.
        }
    
    }
    

    在其他类中,只要你想创建一个对前一个类的引用即可。

    class SomeClass { 
      var referenceToGameClass : gameViewController!
    
    
       func someFunc() {
          self.referenceToGameClass.loadContent()
       }
    }
    

    但是在离开 gameViewController 类时如何保存相同的引用呢?你可以在你的 prepareforsegue 方法中添加这一行,比如说在上面提到的“SomeClass”:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
          if(segue.identifier == "segueID") {
              let svc = segue.destinationViewController as! SomeClass
            svc.referenceToGameClass = self
        }
    
    }
    

    并且方便地,要从“SomeClass”移回相同的 gameViewController,只需使用:

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

    这可能会有点令人困惑,但如果你仔细阅读几次,你就会明白。你也可以问我问题!

    【讨论】:

    • 感谢您的回答。我已经完成了这些。我的问题在于 viewControllers(游戏页面)。当用户获胜并传递到新页面时,我将“presentViewController”用于新页面(实际上是相同的视图和具有新内容的控制器)。问题部分是如果我使用 presentViewController,则将新页面添加到情节提要堆栈中。这种方式使用的内存增加。我不希望内存不必要地变得如此之高。
    • 你有没有想过使用导航控制器?这将创建从第一个视图控制器到最后一个视图控制器的水平流。好处是您可以使用导航控制器方法
    • 检查这个以了解:stackoverflow.com/questions/3852932/…
    猜你喜欢
    • 2015-07-07
    • 1970-01-01
    • 2014-03-19
    • 2023-03-05
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 2018-06-13
    相关资源
    最近更新 更多