swift - 如何在 View Controller 之间传递变量而不需要快速的segue

标签 swift variables view controller

如何在 Swift 中没有 segue 或导航栏的情况下在 View Controller 之间传递变量?我尝试在类外部定义变量,但变量被修改,因此在另一个 View Controller 中访问它们时不会显示更新。我有 5 个 View Controller ,每个 View Controller 上创建一两个新变量。我的目标是将这些变量向下传递到最后一个 View Controller ,其中所有变量都显示在一个 View Controller 上。

下面是一些代码的示例:

class ViewController_name: UIViewController, UITextFieldDelegate {

    //MARK: Properties

    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var field_first: UITextField!
    @IBOutlet weak var field_last: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.field_first.delegate = self
        self.field_last.delegate = self
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    //MARK: Actions

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool { //function tests for pressing return in a text field
        self.view.endEditing(true) //closes the keyboard
        return true
    }
    @IBAction func button_name(_ sender: UIButton) { //tests for button click
        let input_name_first:String = field_first.text! //sets the variable input to the first name text field
        let input_name_last:String = field_last.text! //sets the variable input to the last name text field
        print("\(input_name_first) \(input_name_last)") //prints the full name to console
    }
}

我无法通过 Segues 来做到这一点,因为 View Controller 的序列如下所示:

1 -> 2 -> 3 -> 4 -> 5

我需要获取从1到5的数据。

来自 View Controller 1 的代码,用于将两个变量发送到 View Controller 2。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let name_pass_first = segue.destination as! ViewController_complete
        if let text = field_first.text  {
            name_pass_first.text = text
        }
        let name_pass_last = segue.destination as! ViewController_complete
        if let text1 = field_last.text {
            name_pass_last.text1 = text1
        }
    }

来自 View Controller 2 的代码,用于从 View Controller 1 接收变量:

override func viewDidLoad() {
super.viewDidLoad()
if let received_pass_first_name = text {
    print(received_pass_first_name)
}
if let received_pass_last_name = text1 {
    print(received_pass_last_name)
}
}

最佳答案

I can't do this through segues because the sequence of view controllers looks like this: 1 -> 2 -> 3 -> 4 -> 5 and I need to get data from 1 to 5

说“不能”是愚蠢的。当然可以。你只是不断地传递和积累信息,以便所需的一切都达到 5。你只是意味着你不想这样做,要么是因为你认为它很难看,要么是因为你不想花时间来实现它。

但是为什么不呢?比如说,为什么不传递一个包含所有所需属性的自定义对象,该对象会越来越多地填充,并根据需要进行修改,因为它会向下移动直到达到 5?

关于swift - 如何在 View Controller 之间传递变量而不需要快速的segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48855867/

相关文章:

php - 如何压缩此代码以从 Laravel Controller 向 View 发送信息?

Swift - 不检查 NSCopying 函数参数

swift - 协议(protocol)仅由 struct 或 immutable 实现

java - 变量的范围以 while 循环结束

javascript - 事件中的变量

java - 关于变量赋值和分配的困惑

html - ruby rails : Adding a second custom view to a controller (Rails 3)

mysql - 如何获取 View 之间的mysql依赖关系?

swift - 将 Swift 翻译成英语

ios - 如何在 swift 3.0 中追加 didSelectRow 并删除 didDeselectRow