Swift中的第一个iOS应用程序-UIPickerView中的问号
我正在开发我的第一个Swift ios应用程序 无法将数据从pickerData获取到我的选择器中,但我只获取问号,而不是实际值。我想这和委托有关,但不确定出了什么问题Swift中的第一个iOS应用程序-UIPickerView中的问号,ios,swift,uikit,uipickerview,uipickerviewdelegate,Ios,Swift,Uikit,Uipickerview,Uipickerviewdelegate,我正在开发我的第一个Swift ios应用程序 无法将数据从pickerData获取到我的选择器中,但我只获取问号,而不是实际值。我想这和委托有关,但不确定出了什么问题 import UIKit import CoreData class NewWorkoutController: UIViewController,UIPickerViewDelegate, UIPickerViewDataSource { @IBOutlet weak var workoutDistance: UIText
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()
}
}
此函数的签名错误:
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。您应该修改委托方法主体内的代码,因为如果我们通过编写以下代码将您的pickerView委托和数据源确认为ViewController类,则swift编译器会自动调用委托方法:
pickerViewOutlet.delegate = self
pickerViewOutlet.dataSource = self
因此,只需使用默认签名修改所有pickerView委托方法,编译器就会调用它,数据就会显示在其中。Ah-oh,ReturnRow用于单元格,复制粘贴错误:(非常感谢!可选委托方法的一个问题是,如果方法名称错误,则对象不会以静默方式调用该方法。这会使调试变得困难。请始终记住检查方法名称,然后设置断点(或插入println)并确保确实调用了您的方法。不过,自动完成可能是正确获取方法名称的一个有用的支柱。一旦您声明类符合协议,协议的所有方法都将尝试自动完成,即使是可选的方法。