【问题标题】:Swift picker input value set to specified urlSwift 选择器输入值设置为指定的 url
【发布时间】:2018-03-26 17:36:07
【问题描述】:

我对使用 Swift 很陌生。我正在使用 Swift 制作一个 iPhone 应用程序,该应用程序有一个带有标签“Choose State”的视图和一个包含美国所有 50 个州的选择器视图。

我正在尝试将选择器视图中的每个项目分配给与该州的 DMV 网站地址匹配的指定 URL。 (示例:用户选择堪萨斯州,当他们点击“完成/提交”时,他们会被转到另一个视图控制器,该控制器具有加载“https://www.dmv.org/ks-kansas/”的 Webkit 视图。

我一直在搜索,但没有在网上找到任何有用的东西。

【问题讨论】:

    标签: swift uipickerview xcode9.2


    【解决方案1】:

    你应该像这样创建一个字典

     var dic = [String:String]()
    

    key代表状态,value代表url,picker的title就是字典的key,点击获取url值

    这里还有如何实现选择器:PickerView

    【讨论】:

      【解决方案2】:
      • https://gist.github.com/mshafrir/2646763states_titlecase.json 版本)以 JSON 格式获取美国各州。
      • 例如在每个字典中为 URL 的最后一个路径组件添加一个新的键值对

        {
           "name": "Kansas",
           "abbreviation": "KS",
           "urlPath" : "ks-kansas/"
        }
        
      • 将Swift 4的JSONDecoder的JSON解码成一个struct数组。

      • 使用数组作为选择器视图的数据源。
      • 向用户显示nameabbreviation
      • 当用户选择一个值时,用

        组成 URL
        let url = URL(string: "https://www.dmv.org")!.appendingPathComponent(state.urlPath)
        

      【讨论】:

        【解决方案3】:

        1. 首先,您需要创建一个dataSource,您可以在UIPickerView 中使用它。对于要在UIPickerView 中显示的所有rows,它必须包含titlelink,即

        let data = [
            [
                "title": "Kansas",
                "link": "https://www.dmv.org/ks-kansas/"
            ],
        
            [
                "title": "Title-1",
                "link": "Link-1"
            ],
        
            [
                "title": "Title-2",
                "link": "Link-2"
            ],
        
            [
                "title": "Title-3",
                "link": "Link-3"
            ]
        ]
        

        2.接下来,您需要在您的UIViewController 中实现UIPickerViewDataSourceUIPickerViewDelegate 方法,即

        func numberOfComponents(in pickerView: UIPickerView) -> Int
        {
            return 1
        }
        
        func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
        {
            return data.count
        }
        
        func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
        {
            return data[row]["title"]
        }
        

        不要忘记在viewDidLoad() 中设置UIPickerViewdelegatedataSource

        @IBOutlet weak var pickerView: UIPickerView!
        
        override func viewDidLoad()
        {
            super.viewDidLoad()
        }
        

        3. 现在,按下UIButton,您需要在UIPickerView 中获取selected row's link 并将其发送到包含UIWebViewAnotherViewController,即

        @IBAction func onTapDoneButton(_ sender: UIButton)
        {
            let anotherController = self.storyboard?.instantiateViewController(withIdentifier: "AnotherViewController") as! AnotherViewController
            anotherController.urlString = self.data[self.pickerView.selectedRow(inComponent: 0)]["link"]
            self.present(anotherController, animated: true, completion: nil)
        }
        

        4.这是AnotherViewController 的代码,其中包含UIWebView

        class AnotherViewController: UIViewController
        {
            var urlString: String?
            @IBOutlet weak var webView: UIWebView!
        
            override func viewDidLoad()
            {
                super.viewDidLoad()
                if let urlString = self.urlString, let url = URL(string: urlString)
                {
                    self.webView.loadRequest(URLRequest(url: url))
                }
            }
        }
        

        如果您仍然遇到任何问题,请告诉我。

        【讨论】:

          猜你喜欢
          • 2020-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-15
          • 2021-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多