burada dört adım olacak - biz seçici görünümü verileri tutmak için bazı sabitleri kurmak vereceğiz ve Yapılandırma biti, daha sonra UIPickerViewDataSource
ve UIPickerViewDelegate
yöntemlerini ekleyeceğiz ve viewDidLoad
başlatmasıyla biteceğiz.
Birincisi, yapılandırma:
private let pickerViewData = Array(0...59) // contents will be 0, 1, 2, 3...59, change to whatever you want
private let pickerViewRows = 10_000 // any big number
private let pickerViewMiddle = ((pickerViewRows/pickerViewData.count)/2) * pickerViewData.count
Not pickerViewMiddle
sabit - çok kolay ofset satırdan mevcut değeri elde etmek yapmaya hesaplanır. Veri kaynağına Açık - biz gerçekten sadece her satır için bir başlık gerekiyor, ama biz diziden bir değere bir satır numarasını dönüştürmek için bir yardımcı yöntem ekleyeceğiz:
extension ViewController : UIPickerViewDataSource {
func valueForRow(row: Int) -> Int {
// the rows repeat every `pickerViewData.count` items
return pickerViewData[row % pickerViewData.count]
}
func rowForValue(value: Int) -> Int? {
if let valueIndex = find(pickerViewData, value) {
return pickerViewMiddle + value
}
return nil
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return "\(valueForRow(row))"
}
}
Ve nihayet' senin viewDidLoad
set temsilci ve veri kaynağında,
extension ViewController : UIPickerViewDelegate {
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return pickerViewRows
}
// whenever the picker view comes to rest, we'll jump back to
// the row with the current value that is closest to the middle
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
let newRow = pickerViewMiddle + (row % pickerViewData.count)
pickerView.selectRow(newRow, inComponent: 0, animated: false)
println("Resetting row to \(newRow)")
}
}
başlatmak için ve sonra seçicinizde ortasında satıra doğru hareket: ll temsilci kurmak
self.picker.delegate = self
self.picker.dataSource = self
let initialValue = 0
if let row = rowForValue(initialValue) {
self.picker.selectRow(row, inComponent: 0, animated: false)
}
// or if you just want to start in the middle:
// self.picker.selectRow(pickerViewMiddle, inComponent: 0, animated: false)
Teşekkür! Mükemmel çalışıyor! – ThomasGulli
[Bu yanıt] 'da (http://stackoverflow.com/a/367436/172218) belirtildiği gibi, seçicideki satır sayısını "herhangi bir büyük sayı" olarak ayarlayan VoiceOver, "[item] [büyük sayı] değerini verir ] ", bir erişilebilirlik sorunudur. Bunun herhangi bir yolu var mı? –
Merhaba Nate! Yapılandırmanızı nerede bildiriyorsunuz? Bunu sınıfımda beyan ettim, ancak bana örnekle bir hata ver, sınıfımda kullanılamaz. –