我有两个ViewController,每个都有一个TextField来获取用户输入数字和两个按钮来进行计算和导航。

用户在填充TextField时会在SecondVC中创建TextField的实例,该实例存在并且在视图中显示

问题是:当您在创建对象-单元格后离开SecondView控制器时,稍后再返回时,它被设置回cero,而不是实例-单元格值

class MainViewController: UIViewController {

    @IBOutlet weak var A3TextField: UITextField!

    @IBAction func calc(_ sender: Any) {
        let A3 = Cell(name: "A3", sheet: "", value: Double(A3TextField.text!)!)
        print(A3)

    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

    }
}

class SecondViewController: UIViewController {

    @IBOutlet weak var B3TextField: UITextField!

    @IBAction func calc2(_ sender: Any) {
        let B3 = Cell(name: "B3", sheet: "", value: Double(B3TextField.text!)!)
        print(B3)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

    }

}

struct Cell {

    var name: String = ""
    var sheet: String = ""
    var value: Double = 0

    init(name: String, sheet: String, value: Double) {
        self.name = name
        self.sheet = sheet
        self.value = value
    }

}


ios - 在Swift中导航时,TextField会卸载值-LMLPHP

最佳答案

当控制器弹出或推入时,它们的临时属性值或对象不能保存到其他控制器中,甚至不能保存到其他控制器中,当推入和返回时,它们是初始值,如果要在页面切换时保存值,建议以下解决方案:

1.传递抛出属性值(一个=>两个)

OneViewController:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
 let twoVC = storyboard.instantiateViewController(withIdentifier: "TwoViewControllerID") as! twoViewController
 twoVC.myStr="Controller one to controller two!"
 self.present(twoVC, animated: true, completion: nil)


TwoViewController

 var myStr=String()
  override func viewDidLoad() {
     super.viewDidLoad()
     print("get value:\(myStr)"


}

2,使用NSUerDfault保存并获取

设定值:

let userDefault = UserDefaults.standard
userDefault.set(name, forKey: "name")
userDefault.synchronize()


GetValue:

let userDefault = UserDefaults.standard
let name = userDefault.object(forKey: "name") as? String


3,storybord通过值(一=>二)

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let theSegue=segue.destination as! twoViewController theSegue.myStr="other pass way" }


4,删除通过值(两个=>一个)
基于唐回到首页

TwoViewController:

//(1)create a delegate before class
protocol FTVCdelegte : NSObjectProtocol{
//define method
// one method
 func change(title:String)
 //two method
 func ChangeColoer (Coloer:UIColor)
 //three method
 func ChangSucces(YON:Bool)
 }

 //(2)create delegate object。
var delegate_zsj:FTVCdelegte?

//(3)click back button
 @IBAction func backBtnAction(_ sender: UIButton) {
 delegate_zsj?.change(title: "main page")
 delegate_zsj?.ChangeColoer(Coloer: UIColor.red)
 delegate_zsj?.ChangSucces(YON: true)
 self.navigationController?.popViewController(animated: true)
 }


OneViewController

//(4)inherit delegate:
class SecondViewController: UIViewController,FTVCdelegte,ChangeBtnDelege{
...
//(5)imple delegate method

 func change(title: String) { self.title = title }

 func ChangeColoer(Coloer: UIColor) { self.view.backgroundColor = Coloer }

 func ChangSucces(YON: Bool) { print(YON) }

 //(6)when pop page use
 @IBAction func tiaozhuanBtnAction(_ sender: Any) {
 let storyboard = UIStoryboard(name: "Main", bundle: nil)
 let oneVC = storyboard.instantiateViewController(withIdentifier:   "OneViewControllerID") as! oneViewController
 oneVC.delegate_zsj = self
 self.navigationController?.pushViewController(oneVC, animated: true)
 }


5,阻止通过值(两个=>一个)
基于唐回到首页

TwoViewController:

//(1)define a block method:
var bbchange:((_ title:String,_ myColor:UIColor)->Void)?

//(2)back to front page:
@IBAction func backBtnAction(_ sender: UIButton) {
bbchange?("document",UIColor.green)
self.navigationController?.popViewController(animated: true)


}

OneViewController

//(3)next page invoke block  method
@IBAction func tiaozhuanBtnAction(_ sender: Any) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let threeVC = storyboard.instantiateViewController(withIdentifier:    "twoViewControllerID") as! twoViewController
twoVC.bbchange=
{
  ( title:String,myColor:UIColor) in
  self.title=title
  self.view.backgroundColor=myColor
}
self.navigationController?.pushViewController(twoVC, animated: true)
}

关于ios - 在Swift中导航时,TextField会卸载值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52878509/

10-15 15:13