Первое iOS-приложение в Swift - Вопросительные знаки в UIPickerView
Я работаю над своим первым приложением Swift ios.
Не могу получить данные из pickerData в мой сборщик, но я получаю только вопросительные знаки вместо реальных значений. Я думаю, это как-то связано с делегатом, но я не уверен, что не так.
import UIKit
import CoreData
class NewWorkoutController: UIViewController,UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var workoutDistance: UITextField!
let pickerData = ["11","12","13","14","15"]
// Data Sources
func numberOfComponentsInPickerView(distancePickerView: UIPickerView) -> Int {
return 1
}
func pickerView(distancePickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return pickerData.count
}
// Delegates
func pickerViewReturnRow(distancePickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return pickerData[row]
}
func pickerViewText(distancePickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
workoutDistance.text = pickerData[row]
}
func doneDistancePicker() {
workoutDistance.resignFirstResponder()
}
func cancelDistancePicker() {
workoutDistance.resignFirstResponder()
}
@IBAction func textFieldDistanceEditing2(sender: UITextField) {
// Create picker view
var distancePickerView: UIPickerView
distancePickerView = UIPickerView(frame: CGRectMake(0, 200, view.frame.width, 300))
distancePickerView.backgroundColor = .whiteColor()
distancePickerView.showsSelectionIndicator = true
distancePickerView.delegate = self
distancePickerView.dataSource = self
// Create toolbar
var toolBar = UIToolbar()
toolBar.barStyle = UIBarStyle.Default
toolBar.translucent = true
toolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1)
toolBar.sizeToFit()
// Create buttons
var doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "doneDistancePicker")
var spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
var cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plain, target: self, action: "cancelDistancePicker")
// Assign buttons to toolbar
toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
toolBar.userInteractionEnabled = true
// Add pickerview and toolbar to textfield
workoutDistance.inputView = distancePickerView
workoutDistance.inputAccessoryView = toolBar
sender.inputView = distancePickerView
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
2 ответа
Подпись для этой функции неверна:
func pickerViewReturnRow(distancePickerView: UIPickerView,
titleForRow row: Int,
forComponent component: Int) -> String!
Так должно быть
func pickerView(pickerView: UIPickerView,
titleForRow row: Int,
forComponent component: Int) -> String!
В результате этот метод (который предоставляет заголовки для строк в вашем средстве выбора) не вызывается.
Во всех сигнатурах метода делегата pickerView вы заменили pickerView своим выходом pickerView, который является distancePickerView, который не требуется. Вам следует изменить код внутри тела метода делегата, потому что методы делегата автоматически вызываются быстрым компилятором, если мы подтверждаем ваш делегат pickerView и источник данных для вашего класса ViewController, записывая код следующим образом:
pickerViewOutlet.delegate = self
pickerViewOutlet.dataSource = self
Так что просто измените все методы делегата pickerView со своей сигнатурой по умолчанию, тогда он будет вызван компилятором и в нем будут отображаться данные.