简体   繁体   English

如何存储我的第一个文本字段以免第二次快速查询

[英]How to store my first textfield to not ask for the second time in swift

Thanks in advanced for the help. 非常感谢您的帮助。

I created a UITextField that when the user write a link and enter after that my textfield disappear and my webView Appear. 我创建了一个UITextField,当用户编写一个链接并在此之后输入时,我的文本字段消失了,我的webView出现了。

What i am trying to do is, when the user write the first time their link, the textfield save that link and when the user open again the App, the web view open directly from the last link what user wrote textfield. 我想做的是,当用户第一次编写其链接时,文本字段将保存该链接,而当用户再次打开该应用程序时,Web视图将直接从最后一个链接打开用户写文本字段的内容。 basically the stored link should run the second time. 基本上,存储的链接应该第二次运行。

Here is all my code, 这是我所有的代码,

    import UIKit
import Foundation


let urlKey = "User URL"

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var webView: UIWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.webView.hidden = true
            self.textField.addTarget(self, action: #selector(ViewController.textFieldDidUpdate(_:)), forControlEvents: UIControlEvents.EditingChanged)

      if doesURLExist() {
        self.textField.text = getURL()



  }


}
    // Text Field Delegate
    func textFieldDidUpdate(textField: UITextField)
    {
        // Remove Spaces
        textField.text = textField.text!.stringByReplacingOccurrencesOfString(" ", withString: "", options: [], range: nil)



        // Validate URL
        NSURL.validateUrl(textField.text, completion: { (success, urlString, error) -> Void in
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                if (success)
                {

                  self.saveURL(urlString!)
                  self.webView.hidden = false
                  self.textField.hidden = true 
                  let request = NSURLRequest(URL: NSURL(string: urlString!)!)
                  self.webView.loadRequest(request)

                }
                else
                {
                    self.webView.stopLoading()
                    self.webView.hidden = true
                }


            })

        })



          }
    @IBAction func dismissKeyboard(sender: AnyObject) {
        self.resignFirstResponder()
        self.view.endEditing(true)
    }
  func saveURL(urlString: String)  {
    let defaults = NSUserDefaults.standardUserDefaults()
    defaults.setObject(urlString, forKey: urlKey)
  }

  func getURL() -> String {
    let defaults = NSUserDefaults.standardUserDefaults()
    let urlString = defaults.objectForKey(urlKey) as! String
    return urlString
  }

  func doesURLExist() -> Bool {
    let defaults = NSUserDefaults.standardUserDefaults()
    guard let _ = defaults.objectForKey(urlKey) where defaults.objectForKey(urlKey) is String else {
      return false
    }
    return true
  }


}

here is my project in github: enter link description here 这是我在github中的项目: 在此处输入链接描述

You should save the entered string to user defaults. 您应该将输入的字符串保存为用户默认值。 When your app opens you should check user defaults to see if there's already a saved string. 当您的应用程序打开时,您应该检查用户默认设置,以查看是否已经保存了字符串。

Swift 2 code to save your URL to user defaults: Swift 2代码将您的URL保存为用户默认设置:

NSUserDefaults.standardUserDefaults().setObject(urlString!, forKey: "EnteredURLString")

Swift 2 code to check whether there's a saved URL string: Swift 2代码检查是否存在保存的URL字符串:

if let urlString = NSUserDefaults.standardUserDefaults().stringForKey("EnteredURLString") {
}

You'll want to check if the url exists first by calling doesURLExist , if it does, you opt out of presenting that textfield. 您将要通过调用doesURLExist来检查url是否首先存在,如果存在,则选择不显示该文本字段。 If it does not exist, call saveURL . 如果不存在,请调用saveURL NSUserDefaults provides a simple means to store lightweight data. NSUserDefaults提供了一种存储轻量数据的简单方法。

let urlKey = "User URL"     

func saveURL(urlString: String)  {
    let defaults = NSUserDefaults.standardUserDefaults()
    defaults.setObject(urlString, forKey: urlKey)
}

func getURL() -> String {
    let defaults = NSUserDefaults.standardUserDefaults()
    let urlString = defaults.objectForKey(urlKey) as! String
    return urlString
}

func doesURLExist() -> Bool {
    let defaults = NSUserDefaults.standardUserDefaults()
    guard let _ = defaults.objectForKey(urlKey) where defaults.objectForKey(urlKey) is String else {
        return false
    }
    return true
}

So your class should look something like: 因此,您的课程应类似于:

import UIKit
import Foundation

let urlKey = "User URL"     

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var webView: UIWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.webView.hidden = true

        self.textField.addTarget(self, action: #selector(ViewController.textFieldDidUpdate(_:)), forControlEvents: UIControlEvents.EditingChanged)

        if(doesURLExist) {
            self.textField.text = getURL()
        }
        // Demo UI Settings
    }
}

  // Text Field Delegate
func textFieldDidUpdate(textField: UITextField)
{
    // Remove Spaces
    textField.text = textField.text!.stringByReplacingOccurrencesOfString(" ", withString: "", options: [], range: nil)

    // Validate URL
    NSURL.validateUrl(textField.text, completion: { (success, urlString, error) -> Void in
        dispatch_async(dispatch_get_main_queue(), { () -> Void in
            if (success) {
              self.saveURL(urlString)
              self.webView.hidden = false
              self.textField.hidden = true 
              let request = NSURLRequest(URL: NSURL(string: urlString!)!)
              self.webView.loadRequest(request)
            } else {
                self.webView.stopLoading()
                self.webView.hidden = true
            }
        })
    })
}

Don't forget to add the original functions to your class. 不要忘记将原始函数添加到您的类中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如果用户第一次拒绝swift,如何再次请求权限(RunTime) - How to ask permission (RunTime) again if the user deny for the first time swift 如何在Realm Swift中存储时间间隔(小时:分钟:秒) - How to store a time interval (hour:minute:second) in Realm swift 如何将 InputAccessoryView 中的 TextField 设置为第一响应者 [Swift] - How to set TextField in InputAccessoryView as First Responder [Swift] 如何修复第二次而不是第一次加载的Webview? - How do I fix my webview loading the second time and not the first? 第一次打开ios模拟器时,它要求输入密码 - When I First time open my ios Simulator, It ask for password iphone:如何利用我的文本字段的第一个字符? - iphone : How to capitalize the first character of my textfield? 如何将来自 TextField 的输入存储到 Swift 中的字符串数组中? - How to store input from TextField into an array of Strings in Swift? 将数据从第二个VC传递到第一个VC,并在文本字段Swift4中显示 - Pass data from second VC to first VC and also show in textfield Swift4 如何从 swift 中的文本字段值中删除第一个字符 - how to remove first character from textfield value in swift Swift:如何同时使用两个func文本字段 - Swift: How to use two func textfield at same time
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM