在 PickerView IOS Swift 4.2 中从服务器加载数据
Load data from server in PickerView IOS Swift 4.2
我正在开发 IOS 应用程序,我想在我的 PickerView 中显示来自服务器的数据。我是 Ios 开发的新手,这就是为什么我对如何在我的 PickerView
中加载任何 ParseObject
数据感到困惑。我的 ParseObject
包含 "title" 和 "status" 值。我想在我的 PickerView 中显示来自 ParseObject 的 "title" 的值,所以稍后如果我点击 PickerView
我也可以得到那个 ParseObject。下面给出了我的代码,请指导我如何在我的 PickerView 中显示 ParseObject 数据。
import Foundation
import UIKit
import Parse
class SignUpViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var positionPickerOutlet: UIPickerView!
var pickerData: [String] = [String]()
var selectPositionsData: [PFObject] = [PFObject]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.positionPickerOutlet.delegate = (self as UIPickerViewDelegate)
self.positionPickerOutlet.dataSource = (self as UIPickerViewDataSource)
getPositionData()
}
@IBAction func cancelFunction(_ sender: Any) {
dismiss(animated: true, completion: nil)
print("Sign Up Canceled")
}
func pickerView(_ pickerView: UIPickerView,
numberOfRowsInComponent component: Int) -> Int {
// Row count: rows equals array length.
return pickerData.count
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView,
titleForRow row: Int,
forComponent component: Int) -> String? {
// Return a string from the array for this row.
return pickerData[row]
}
// 在这里,我调用了一个 ParseQuery 函数并获取了一个 ParseObject 列表并将其放入我的 selectPositionsData 数组中。
func getPositionData(){
let parseQuery = PFQuery(className:"UserPosition")
parseQuery.limit = 100
parseQuery.order(byAscending: "createdAt")
parseQuery.whereKey("status", equalTo: true)
parseQuery.findObjectsInBackground { (objects :[PFObject]?, error: Error?) in
if objects != nil {
// do something with the array of object returned by the call
for parseObject in objects! {
self.selectPositionsData.append(parseObject)
// Here I am putting parseObject "title" in my array.
self.pickerData.append(parseObject.value(forKey: "title") as! String)
}
print(self.selectPositionsData)
self.positionPickerOutlet.reloadAllComponents()
} else {
print(error?.localizedDescription as Any)
}
}
}
}
在您的选择器 View DidSelect 方法中获取如下值:
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
let title = self.selectPositionsData[row].value(forKey: "title") as! String
let status = self.selectPositionsData[row].value(forKey: "status") as! String
let objectAtIndex = self.selectPositionsData[row]
}
从属于 index/row 的 selectPositionsData[] 获取一个 object 并从 ParseObject 获取它的 属性 值。无需将字符串从 selectPositionsData[] 迭代到单独的标题数组。
func pickerView(_ pickerView: UIPickerView,
titleForRow row: Int,
forComponent component: Int) -> String? {
// Return a string from the array for this row.
return selectPositionsData[row].value(forKey: "title")
}
我正在开发 IOS 应用程序,我想在我的 PickerView 中显示来自服务器的数据。我是 Ios 开发的新手,这就是为什么我对如何在我的 PickerView
中加载任何 ParseObject
数据感到困惑。我的 ParseObject
包含 "title" 和 "status" 值。我想在我的 PickerView 中显示来自 ParseObject 的 "title" 的值,所以稍后如果我点击 PickerView
我也可以得到那个 ParseObject。下面给出了我的代码,请指导我如何在我的 PickerView 中显示 ParseObject 数据。
import Foundation
import UIKit
import Parse
class SignUpViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var positionPickerOutlet: UIPickerView!
var pickerData: [String] = [String]()
var selectPositionsData: [PFObject] = [PFObject]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.positionPickerOutlet.delegate = (self as UIPickerViewDelegate)
self.positionPickerOutlet.dataSource = (self as UIPickerViewDataSource)
getPositionData()
}
@IBAction func cancelFunction(_ sender: Any) {
dismiss(animated: true, completion: nil)
print("Sign Up Canceled")
}
func pickerView(_ pickerView: UIPickerView,
numberOfRowsInComponent component: Int) -> Int {
// Row count: rows equals array length.
return pickerData.count
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView,
titleForRow row: Int,
forComponent component: Int) -> String? {
// Return a string from the array for this row.
return pickerData[row]
}
// 在这里,我调用了一个 ParseQuery 函数并获取了一个 ParseObject 列表并将其放入我的 selectPositionsData 数组中。
func getPositionData(){
let parseQuery = PFQuery(className:"UserPosition")
parseQuery.limit = 100
parseQuery.order(byAscending: "createdAt")
parseQuery.whereKey("status", equalTo: true)
parseQuery.findObjectsInBackground { (objects :[PFObject]?, error: Error?) in
if objects != nil {
// do something with the array of object returned by the call
for parseObject in objects! {
self.selectPositionsData.append(parseObject)
// Here I am putting parseObject "title" in my array.
self.pickerData.append(parseObject.value(forKey: "title") as! String)
}
print(self.selectPositionsData)
self.positionPickerOutlet.reloadAllComponents()
} else {
print(error?.localizedDescription as Any)
}
}
}
}
在您的选择器 View DidSelect 方法中获取如下值:
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
let title = self.selectPositionsData[row].value(forKey: "title") as! String
let status = self.selectPositionsData[row].value(forKey: "status") as! String
let objectAtIndex = self.selectPositionsData[row]
}
从属于 index/row 的 selectPositionsData[] 获取一个 object 并从 ParseObject 获取它的 属性 值。无需将字符串从 selectPositionsData[] 迭代到单独的标题数组。
func pickerView(_ pickerView: UIPickerView,
titleForRow row: Int,
forComponent component: Int) -> String? {
// Return a string from the array for this row.
return selectPositionsData[row].value(forKey: "title")
}