Как выбрать ip с помощью UIPickerView с помощью Swift? - PullRequest
0 голосов
/ 17 октября 2018

У меня есть приложение vpn.Наше приложение поставляется с одним сервером, этот сервер жестко запрограммирован в приложении.Похоже на это;let serverAddress = "0.0.0.0" (но с реальным ip-сервером).

Я сделал вид сборщика, используя следующее:

let 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", заменив 0.0.0.0 на выбранный ip.

В итоге: у меня есть толькоУказан 1 сервер. Если бы я захотел изменить его, я бы изменил let serverAddress = "0.0.0.0", но я бы хотел добавить больше серверов в качестве опции.поэтому мне как-то нужно изменить 0.0.0.0

Лично я считаю, что представление выбора - лучший способ сделать это.Но я открыт для идей.

Исходный код, с которым я работаю, находится здесь: https://github.com/lxdcn/NEPacketTunnelVPNDemo

1 Ответ

0 голосов
/ 18 октября 2018

Во-первых, вы должны изменить 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, вы можетепросто вставьте новое значение словаря в свой словарь

...