【问题标题】:Save value to UserDefaults [duplicate]将值保存到 UserDefaults [重复]
【发布时间】:2020-11-20 22:12:46
【问题描述】:

我刚开始用 swift 编程,所以请考虑到这一点。我正在开发一个根据单击的按钮发送短信的应用程序。我已经弄清楚了一切,并且该应用程序运行良好,但是我遇到一个问题,即每次打开该应用程序时该应用程序都会提示我输入收件人号码。我发现电话号码没有保存,但我找不到将 usrTextField var 保存到 UserDefaults 的方法。这是应用程序的代码:

import UIKit
import MessageUI

class ViewController: UIViewController, MFMessageComposeViewControllerDelegate{
var usrTextField: UITextField?
var pwdTextField: UITextField?


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

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

    
@IBAction func displayAlertAction(_ sender: Any) {
    
    let alertController = UIAlertController(title: "Enter phone number and password", message: nil, preferredStyle: .alert)
    alertController.addTextField(configurationHandler: usrTextField)
    alertController.addTextField(configurationHandler: pwdTextField)
    
    let okAction = UIAlertAction(title: "OK", style: .default, handler: self.okHandler)
    let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
    
    alertController.addAction(okAction)
    alertController.addAction(cancelAction)
    
    self.present(alertController, animated: true)

    
    
}

func usrTextField(textField: UITextField!) {
    usrTextField = textField
    usrTextField?.placeholder = "06XXXXXXX"
    
    
}

    
func pwdTextField(textField: UITextField!) {
    pwdTextField = textField
    pwdTextField?.placeholder = "123456"
    pwdTextField?.isSecureTextEntry = true
    
            
}
func okHandler(alert: UIAlertAction!) {
    let simpleVC = SimpleVC()
    simpleVC.customInit(usrStr: (usrTextField?.text)!, pwdStr: (pwdTextField?.text)!)
    self.navigationController?.pushViewController(simpleVC, animated: true)
}

func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {
    self.dismiss(animated: true, completion: nil)
}
@IBAction func Dugme1(_ sender: AnyObject)
{
    
    if MFMessageComposeViewController.canSendText()
    {
        let controller = MFMessageComposeViewController ()
        controller.body = "Message1"
        if let temp = usrTextField {
           
            controller.recipients = [self.usrTextField!.text!]
            
        } else {
            let alert = UIAlertController(title: "AlfaPro Alarm", message: "Please enter the phone number in settings", preferredStyle: .alert)

            alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil))
            self.present(alert, animated: true)
        }
        
        controller.messageComposeDelegate = self
        self.present(controller, animated: true, completion: nil)
        let impact = UIImpactFeedbackGenerator() // 1
        impact.impactOccurred()
         }
    
    

    else
    {
        print("error in sending")
    }
}



    

另一个故事板的代码:

import UIKit

class SimpleVC: UIViewController {
@IBOutlet weak var usrLabel: UILabel!
@IBOutlet weak var pwdLabel: UILabel!

var usrStr: String?
var pwdStr: String?


override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    usrLabel.text = usrStr
    pwdLabel.text = pwdStr

}

func customInit(usrStr: String, pwdStr: String) {
    self.usrStr = usrStr
    self.pwdStr = pwdStr
}

/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // Get the new view controller using segue.destination.
    // Pass the selected object to the new view controller.
}
*/

}

【问题讨论】:

    标签: ios swift xcode


    【解决方案1】:

    在我的SceneDelegate.swift 底部,我有以下代码:

    struct savedString {
        var string: String = UserDefaults.standard.string(forKey: "mystring") ?? "" {
            didSet {
                UserDefaults.standard.set(string, forKey: "mystring")
            }
        }
    }
    

    从那里,我可以使用将其加载到视图中

    @State var myString = savedString()
    

    然后在我的视图主体中使用它(例如设置占位符)

    Text(myString.string) // get
    TextField("My String", text: $myString.string) // set
    

    【讨论】:

      猜你喜欢
      • 2021-02-07
      • 1970-01-01
      • 2017-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多