我正在尝试创建选项卡栏应用程序。我向第一个 View Controller 添加了一个按钮和一个文本字段。当我写一些文本并按下按钮时,我期望加载第二个 View Controller ,并在标签字段中显示文本字段中的文本。
我有 2 个问题。
- 第二个 View Controller 加载了两次。
- 当我按下选项卡栏上的按钮并再次加载第一个 View Controller 时?我的文字消失了。
我只开始使用 Xcode。请帮助我并详细描述解决办法🙏
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
}
}
最佳答案
看起来您的 View Controller 已加载两次,因为您加载了它两次。
不要将 Storyboard上的每个屏幕视为根据单例模式的独特实体。他们不是。它们是自己独特的类/ View 组合,每次调用它时都会实例化(加载)一次。换句话说,您查看的不是 Storyboard中的“实际”类,而是查看在需要时用于构建类的模板。因此,您在两个不同的地方调用它两次,它很乐意为您生成底层 View / Controller 的多个副本。
我认为您不想使用导航 Controller 将 View “推”回堆栈。您需要告诉选项卡栏切换到不同的 View 。
您正在寻找的代码的 swift 版本是:
self.tabBarController?.selectedIndex = 1
我认为 Objective-C 的等价物是......
[[self tabBarController] setSelectedIndex:1];
但是自从我快速完成以来已经足够长的时间了,我可能忽略了其中的一些重要内容。
关于ios - View Controller 加载了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47188744/