UIPickerView повторно использовать представление всегда ноль

В соответствии с ссылками API Apple, повторное использование представления в этом методе

optional func pickerView(_ pickerView: UIPickerView, 
          viewForRow row: Int, 
        forComponent component: Int, 
             reusing view: UIView?) -> UIView

это кэшированное представление в представлении выбора, но когда я пытаюсь использовать его для следующих строк, оно всегда равно нулю, пока я возвращаю UILabel при повторном использовании вид равен нулю. В чем проблема? это моя реализация:

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
    let pickerLabel = UILabel()
    pickerLabel.textColor = UIColor.black
    pickerLabel.text = "10"
    pickerLabel.textAlignment = NSTextAlignment.center
    pickerLabel.sizeToFit()
    return pickerLabel
}

1 ответ

Решение

Ваш код не пытается использовать вид повторного использования. Ваш код должен быть примерно таким:

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
    var pickerLabel : UILabel
    if let label = view as? UILabel {
        pickerLabel = label
    } else {
        pickerLabel = UILabel()
        pickerLabel.textColor = UIColor.black
        pickerLabel.textAlignment = NSTextAlignment.center
    }

    pickerLabel.text = "10"
    pickerLabel.sizeToFit()

    return pickerLabel
}

Этот код повторно использует метку, если представление повторного использования является меткой. В противном случае он создает и устанавливает новый ярлык.

Обратите внимание, что средство выбора передается только в представлении повторного использования при прокрутке представления средства выбора. Это похоже на повторное использование ячейки табличного представления.

Другие вопросы по тегам