Swift 选择器输入值设置为指定的 url

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

 var dic = [String:String]()

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

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

【讨论】:

【参考方案2】: 从https://gist.github.com/mshafrir/2646763(states_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))
        
    

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

【讨论】:

以上是关于Swift 选择器输入值设置为指定的 url的主要内容,如果未能解决你的问题,请参考以下文章

vbscript HTML5输入类型日期 - 为日期选择器指定默认值

vbscript HTML5输入类型日期 - 为日期选择器指定默认值

如何在 Swift 中为日期选择器设置特定的默认时间

LABVIEW条件结构,添加分支,为啥提示:条件结构,选择器值存在错误类型

在动态创建的表单后 ajax 调用中将默认值设置为日期选择器

如何在 swift 4 中从图像选择器获取照片本地 url