Ios 如何使用UIPickerView和Swift选择ip?
我拥有一个vpn应用程序。我们的应用程序预定义了一个服务器,该服务器硬编码到应用程序中。看起来是这样的,Ios 如何使用UIPickerView和Swift选择ip?,ios,swift,xcode,uipickerview,Ios,Swift,Xcode,Uipickerview,我拥有一个vpn应用程序。我们的应用程序预定义了一个服务器,该服务器硬编码到应用程序中。看起来是这样的,让serverAddress=“0.0.0.0”(但使用真正的服务器ip) 我使用以下内容创建了一个选择器视图: 让IPs=[“GER1”、“UK1”、“GER2”、“UK2”] 我现在想知道怎么说“GER1=192.168.1.2UK1=192.168.1.3GER2=192.168.1.4UK2=192.168.1.5” 然后将其解析为let serverAddress=“0.0.0.0”
让serverAddress=“0.0.0.0”
(但使用真正的服务器ip)
我使用以下内容创建了一个选择器视图:
让IPs=[“GER1”、“UK1”、“GER2”、“UK2”]
我现在想知道怎么说“GER1=192.168.1.2
UK1=192.168.1.3
GER2=192.168.1.4
UK2=192.168.1.5
”
然后将其解析为let serverAddress=“0.0.0.0”
用所选ip替换0.0.0
总之:
我只指定了一台服务器,如果我想更改它,我会更改让serverAddress=“0.0.0.0”
,但我想添加更多服务器作为一个选项。所以我需要改变0.0.0.0
我个人认为picker view是最好的方式。但我对想法持开放态度
我正在使用的源代码如下:首先,您应该将
serverAddress
更改为var
,而不是let
然后,您应该使用委托函数:didSelectRow
,将serverAddress
更改为所选的服务器地址
为了实现这一点,我建议使用字典存储所有要从中选择的服务器,如下所示:
class YourViewController {
// MARK: - Server Address
var serverAddress = "0.0.0.0"
// MARK: Picker View Resources
let serverPicker = UIPickerView() {
didSet {
serverPicker.delegate = self
serverPicker.dataSource = self
}
}
var serverPickerData:[(key: String, value: String)] = [("base", "0.0.0.0"), ("ger1", "192.68.1.2"), ("uk1", "192.68.1.3"), ("ger2", "192.68.1.4"), ("uk2", "192.68.1.5")]
....
}
extension YourViewController: UIPickerViewDelegate, UIPickerViewDataSource {
// MARK: - UIPicker View Delegate
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return serverPickerData.count
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
serverAddress = serverPickerData[row].value
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return "\(serverPickerData[row].key) - \(serverPickerData[row].value)"
}
}
然后,每当您需要向UIPicker添加服务器时,只需将新的字典值推送到字典上即可谢谢!我在家时会试试这个,希望它能奏效:)@Benftw先生如果对你有效,如果你接受这个答案,我将不胜感激!好luckHi,我不知道我把这个放在哪里了,我已经把整个
viewcontroller.swift
文件上传到了粘贴箱,如果可以的话。请复制、添加代码并上传回:)谢谢!(我确实试过自己做,但出现了一系列错误)粘贴箱:我已经更新了我的答案,以反映代码应该放在哪里。(我还添加了picker.dataSource=self
行)。我猜您所收到的错误是因为行picker.dataSource=self
和picker.delegate=self
无效,因为您的viewController没有扩展UIPickerViewDeleteGate和UIPickerViewData协议,这意味着,当您将选择器协议分配给self
时,编译器无法识别ViewController是否具有这些协议函数。错误:使用未声明的类型“ServerPickerData”另一个错误“let”声明无法观察属性。最后一个错误:方法“pickerView(pickerView:numberOfRowsInComponent:)”的参数标签与协议“UIPickerViewDataSource”所需的参数标签不同(“pickerView(OfRowsInComponent:)”)