Первое 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 со своей сигнатурой по умолчанию, тогда он будет вызван компилятором и в нем будут отображаться данные.

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