Viewcontroller加载了两次

时间:2017-11-08 20:07:25

标签: ios swift xcode

我正在尝试创建Tab Bar应用程序。我在第一个viewcontroller中添加了一个按钮和一个文本字段。当我写一些文本和按下按钮时,我希望加载第二个viewcontroller,并在标签字段中显示文本字段中的文本。

我有两个问题。

  1. 第二个viewcontroller加载了两次。
  2. 当我按下标签栏上的按钮并再次加载第一个viewcontroller时?我的文字消失了。
  3. 我只开始使用Xcode。请帮助我并详细描述决心

    enter image description here

    enter image description here

    enter image description here

    enter image description here

    import UIKit
    
    var tfTextString: String = ""
    
    class FirstViewController: UIViewController {
        @IBOutlet weak var textField: UITextField!
    
        @IBAction func enter(_ sender: Any) {
            if textField.text != "" {
                //performSegue(withIdentifier: "segue", sender: self)
                //tfTextString = textField.text!
                self.tabBarController?.selectedIndex = 0
            }
        }
    
        override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            var secondController = segue.destination as! SecondViewController
            secondController.myString = textField.text!
        }
    }
    
    import UIKit
    
    class SecondViewController: UIViewController {
        @IBOutlet weak var label: UILabel!
        var myString = String()
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            label.text = myString
        }
    }
    

1 个答案:

答案 0 :(得分:3)

看起来您的视图控制器已加载两次,因为您加载两次。

不要将故事板上的每个屏幕视为按照单身模式自己的独特实体。他们不是。他们拥有自己独特的类/视图组合,每次调用它时都会实例化实例化(加载)。换句话说,你不是在看实际的'故事板中的类,您可以查看在调用时用于构建类的模板。因此,您需要在两个不同的地方进行两次调用,并且乐意为您生成基础视图/控制器的多个副本。

我认为您不想使用导航控制器来推动'视图回到堆栈。您可能希望告诉标签栏切换到其他视图。

您正在寻找的代码的快速版本是:

self.tabBarController?.selectedIndex = 1

我认为客观C等价物是......

[[self tabBarController] setSelectedIndex:1];

但是,由于我已经做得很快,我可能已经忽略了那里重要的事情。