여기 네 단계가 될 것입니다 - 우리는 피커 뷰 데이터를 보유 할 몇 가지 상수를 설정합니다 및 구성을 조금 변경 한 다음 UIPickerViewDataSource
및 UIPickerViewDelegate
메서드를 추가하고 viewDidLoad
초기화로 끝냅니다.
첫째, 구성 :
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
참고 pickerViewMiddle
일정 - 매우 쉽게 오프셋 행에서 우리의 현재 가치를 얻을 수 있도록 계산합니다. 데이터 소스에 - 우리가 정말 각 행에 대한 제목을 제공해야하지만, 우리는 배열에서 값에 행 번호를 변환하는 도우미 메서드 추가 할 것입니다 :
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))"
}
}
을 그리고 마지막으로 우리가 ' 당신의 viewDidLoad
설정 위임 및 데이터 소스에,
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)")
}
}
초기화하려면 다음 선택기의 중간에 올바른 행으로 이동 : LL 대리자를 설정
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)
감사합니다! 그것은 완벽하게 작동합니다! – ThomasGulli
[이 답변] (http://stackoverflow.com/a/367436/172218)에서 언급했듯이 피커의 행 수를 "임의의 큰 수"로 설정하면 VoiceOver가 엉망이되어 [큰 숫자 ] ", 접근성 문제입니다. 이 주변의 어떤 방법? –
안녕하세요, 네이트! 구성을 어디에 선언합니까? 나는 내 수업에서 그것을 선언했지만 내 수업에서 인스턴스를 사용할 수 없다는 오류를 제공합니다. –