Выбор строки второго компонента Swift uipickerview не работает

У меня есть pickerview в Swift с двумя компонентами. Это работает, за исключением случаев, когда я хочу установить строку во втором компоненте с помощью selectrow. Это когда пользователь перезагружает приложение, и у нас уже есть установленное значение. Первый компонент selectrow работает. Вот мой код:

    override func viewDidLoad() {
    super.viewDidLoad()

    print("In viewDidLoad")

    detailArmy.loadarmy(detailArmy, armymember: detailItem)

    myGeneralPicker.dataSource = self
    myGeneralPicker.delegate = self
    // Set General Picker View to current value
    let general = generalTypeInfo()
    picker1Options = general.generalType()
    print("Detail Item general: \(detailArmy.general)")
    if detailArmy.general == "" {
        myGeneralPicker.selectRow(0, inComponent: 0, animated: false)
        picker2Options = general.generalInfo("None")
    } else {
        myGeneralPicker.selectRow(picker1Options.indexOf(detailArmy.general)!, inComponent: 0, animated: false)
        picker2Options = general.generalInfo(detailArmy.general)
    }
    print("Detail Item general Type: \(detailArmy.generaltype) picker2Options: \(picker2Options)")
    if detailArmy.generaltype == "" {
        myGeneralPicker.selectRow(0, inComponent: 1, animated: false)
    } else {   
        //myGeneralPicker.selectRow(picker2Options.indexOf(detailArmy.generaltype)!, inComponent: 1, animated: false)
        myGeneralPicker.selectRow(4, inComponent: 1, animated: false)
    }
}
    //MARK: Delegates and data sources
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    //println("In numberOfComponenetsInPickerView pickerView: \(pickerView)")
    return 2
}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    if component == 0 {
        return picker1Options.count
    } else {
        return picker2Options.count
    }
}

//Mark: Delegates
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    //var dicerow = dice[row]
    print("titleForRow row: \(row) component: \(component)")
    if component == 0 {
        return String(picker1Options[row])
    } else {
        return String(picker2Options[row])
    }
}

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if component == 0 {
        generalpickinfo = picker1Options[row]
        print("pickerView general selected: \(generalpickinfo)")
        let general = generalTypeInfo()
        picker2Options = general.generalInfo(picker1Options[row])
        pickerView.reloadAllComponents()
        myGeneralPicker.selectRow(0, inComponent: 1, animated: false)
    } else {
        generalpicktype = picker2Options[row]
        print("pickerView general type selected: \(generalpicktype)")
    }
}

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {
    print("viewForRow row: \(row) component: \(component)")
    let pickGeneralLabel = UILabel()
    pickGeneralLabel.textAlignment = .Center
    if component == 0 {
        pickGeneralLabel.text = String(picker1Options[row])
    } else {
        pickGeneralLabel.text = String(picker2Options[row])
    }
    return pickGeneralLabel
}

class generalTypeInfo {
    func generalType() -> [String] {
        return ["None","C-in-C","Subordinate","Ally"]
    }

    func generalInfo(type: String) -> [String] {
        if type == "None" {
            return ["None"]
        } else {
            return ["None","Brilliant","Inert"]
        }
    }

    func generalTypeIndex(type: String) -> Int {
        let generalTypeDict = ["None": 0, "C-in-C": 1, "Subordinate": 2, "Ally": 3]
        return generalTypeDict[type]!
    }

    func generalInfoIndex(type: String) -> Int {
        let generalInfoDict = ["None": 0, "Brilliant": 1, "Inert": 2]
        return generalInfoDict[type]!
    }
}

В моем коде в настоящее время я намеренно поставил значение 4 в этой строке:

myGeneralPicker.selectRow(4, inComponent: 1, animated: false)

в приведенной выше строке есть правильный код, который я хочу запустить, но я вставил его, потому что это должно привести к сбою приложения, поскольку нет 4-го значения. И полностью игнорирует это.

Кто-нибудь скажет мне, что я делаю неправильно с этим? Спасибо.


person Juio    schedule 30.09.2015    source источник


Ответы (1)


Итак, задайте вопрос, а затем узнайте ответ.

Ответ состоит в том, чтобы переместить строку выбора в ViewDidAppear.

Я нашел решение здесь: UIPickerView selectRow не работает

Спасибо

person Juio    schedule 01.10.2015