2017-11-01 8 views
2

UIPickerViewで選択した行の色を変更する必要があります。UIPickerViewでselectedRowの色を変更します。転記時にも

私は色を変更することができましたが、質問にはすでにいくつかの回答がありますが、とにかくそれらは私を満足させません。これらの実装では、pickerviewのアニメーションはうんざりです。

これは、現在のソリューション

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

    var label: UILabel 
    if view == nil { 
     label = UILabel() 
    } else if view is UILabel { 
     label = view as! UILabel 
    } else { 
     label = UILabel() 
    } 

    let title: NSAttributedString 
    if self.model?.selectedValue == row { 
     title = UIPickerView.attributedString(with: .selectedRow, text: "\(model?.years[row] ?? 0)") 
    } else { 
     title = UIPickerView.attributedString(with: .unselectedRow, text: "\(model?.years[row] ?? 0)") 
    } 

    label.attributedText = title 
    return label 
} 

そして、ユーザーがスクロールのコードですが、私はコンポーネントをリロードします。

しかし、下の画像でわかるように、ユーザーがスクロールすると、緑色のフィールドが移動し、緑色のラベルがセレクターインジケーターの下にあり、選択された行が黒色になります。

pickerview while scrolling after scroll but before the reload

は私が持っているしたいことは何が外に灰色のデフォルトの色合いを保ちながら、セレクタインジケータ内のすべてが緑であることです。

どうすれば実装できますか?

答えて

1

代わりにattributedTitleForRowを使用してください。NSAttributedStringで独自のラベルを作成する必要はありません。 didSelectRowでは、すべての色をリセットして新しいものを緑色に設定できるように、すべてのコンポーネントをリロードします。

func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? { 
    let color = (row == pickerView.selectedRow(inComponent: component)) ? UIColor.green : UIColor.black 
    return NSAttributedString(string: self.model[row], attributes: [NSForegroundColorAttributeName: color]) 
} 

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    pickerView.reloadAllComponents() 
} 
+0

すでに試しましたが、動作しません。 私はまだ年が黒くなって緑色になるのを見ることができます。 –

+0

あなたは何を意味するのか分かりません。スクロールするときに緑色を削除しますか? –

+0

いいえいいえ、上下にスクロールすると、選択ビューに半分の文字列があり、残りの半分(選択されていない)の文字列の半分が半分の緑色と半分の灰色になります。 デフォルトのインプリメンテーションでは、色を使わないでスクロールすると半透明の黒と半透明の黒がアルファ<1で表示されます。 黒の代わりに緑色で同じ効果が欲しいです。 –

関連する問題