Ios 具有不同数组的每个文本字段的UIPickerView(Swift/Firebase)
我试图创建一个表单,其中每个文本字段都有一个UIPickerView,用户可以使用它来选择所需的选项。我需要为每个文本字段使用一个不同的信息数组,但我似乎无法让它工作,我已经在它上面停留了很长一段时间了 我有一个可能有效的方法,但是我无法从Firebase的文本字段中检索数据,因为每个字段都有相同的名称 这是我迄今为止的代码,这是我尝试过的最新方法,但不起作用:Ios 具有不同数组的每个文本字段的UIPickerView(Swift/Firebase),ios,swift,firebase,uipickerview,Ios,Swift,Firebase,Uipickerview,我试图创建一个表单,其中每个文本字段都有一个UIPickerView,用户可以使用它来选择所需的选项。我需要为每个文本字段使用一个不同的信息数组,但我似乎无法让它工作,我已经在它上面停留了很长一段时间了 我有一个可能有效的方法,但是我无法从Firebase的文本字段中检索数据,因为每个字段都有相同的名称 这是我迄今为止的代码,这是我尝试过的最新方法,但不起作用: import UIKit import Firebase import FirebaseDatabase class CreateP
import UIKit
import Firebase
import FirebaseDatabase
class CreatePostViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate, UITextFieldDelegate {
@IBOutlet weak var gameTextField: UITextField!
@IBOutlet weak var activityTextField: UITextField!
@IBOutlet weak var consoleTextField: UITextField!
@IBOutlet weak var skillTextField: UITextField!
@IBOutlet weak var communicationTextField: UITextField!
@IBOutlet weak var lfglfmTextField: UITextField!
@IBOutlet weak var rulesTextView: UITextView!
@IBOutlet weak var descriptionTextView: UITextView!
var games = ["Assassin's Creed Origins", "Battlefield 1", "Call of Duty: Advanced Warfare", "Call of Duty: Black Ops III", "Call of Duty: Ghosts", "Call of Duty: Infinite Warfare", "Call of Duty: Modern Warfare Remastered", "Call of Duty: WWII", "Destiny", "Destiny 2", "Fifa 16", "Fifa 17", "Fifa 18", "Rocket League"]
var console = ["Xbox One", "Xbox 360", "Playstation 4", "Playstation 3"]
var skill = ["Achiever", "Explorer", "Killer", "Socializer"]
var communication = ["Mic", "No Mic"]
var lfglfm = ["LFG", "LFM"]
var itemSelected = ""
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
//remove margin / padding from textview
self.rulesTextView.textContainerInset = .zero
self.rulesTextView.contentInset = UIEdgeInsetsMake(0, -5, 0, 0)
// self.descriptionTextView.textContainerInset = .zero
// self.descriptionTextView.contentInset = UIEdgeInsetsMake(0, -5, 0, 0)
//allow tap on screen to remove text field input from screen
self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:))))
//UIPICKER
let pickerView = UIPickerView()
pickerView.delegate = self
pickerView.dataSource = self
gameTextField.inputView = pickerView
consoleTextField.inputView = pickerView
skillTextField.inputView = pickerView
communicationTextField.inputView = pickerView
lfglfmTextField.inputView = pickerView
updatePicker()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//update pickerView
func updatePicker(){
let pickerView = UIPickerView()
pickerView.reloadAllComponents()
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if gameTextField.isFirstResponder{
return games.count
}else if consoleTextField.isFirstResponder{
return console.count
}else if skillTextField.isFirstResponder{
return skill.count
}else if communicationTextField.isFirstResponder{
return communication.count
}else if lfglfmTextField.isFirstResponder{
return lfglfm.count
}
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
if gameTextField.isFirstResponder{
return games[row]
}else if consoleTextField.isFirstResponder{
return console[row]
}else if skillTextField.isFirstResponder{
return skill[row]
}else if communicationTextField.isFirstResponder{
return communication[row]
}else if lfglfmTextField.isFirstResponder{
return lfglfm[row]
}
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if gameTextField.isFirstResponder{
let itemselected = games[row]
gameTextField.text = itemselected
}else if consoleTextField.isFirstResponder{
let itemselected = console[row]
consoleTextField.text = itemselected
}else if skillTextField.isFirstResponder{
let itemselected = skill[row]
skillTextField.text = itemselected
}else if communicationTextField.isFirstResponder{
let itemselected = communication[row]
communicationTextField.text = itemselected
}else if lfglfmTextField.isFirstResponder{
let itemselected = lfglfm[row]
lfglfmTextField.text = itemselected
}
}
@IBAction func createPostTapped(_ sender: UIButton) {
if let uid = Auth.auth().currentUser?.uid {
Database.database().reference().child("usernames").child(uid).observeSingleEvent(of: .value, with: {
(snapshot) in
if let userDictionary = snapshot.value as? [String: AnyObject] {
for user in userDictionary {
if let username = user.value as? String {
if let game = self.gameTextField.text {
if let activity = self.activityTextField.text {
if let console = self.consoleTextField.text {
if let skill = self.skillTextField.text {
if let communication = self.communicationTextField.text {
if let lfglfm = self.lfglfmTextField.text {
if let description = self.descriptionTextView.text {
let postObject: Dictionary<String, Any> = [
"uid" : uid,
"username" : username,
"game" : game,
"activity" : activity,
"console" : console,
"skill" : skill,
"communication" : communication,
"lfglfm" : lfglfm,
"description" : description
]
Database.database().reference().child("posts").childByAutoId().setValue(postObject)
let alert = UIAlertController(title: "Success!", message: "Your post was added successfully.", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { (action) in
//code will run when ok button is pressed
let vc = self.storyboard?.instantiateViewController(withIdentifier: "LoggedInVC")
self.present(vc!, animated: true, completion: nil)
}))
self.present(alert, animated: true, completion: nil)
}
}
}
}
}
}
}
}
}
}
})
}
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
导入UIKit
进口火基
导入FirebaseDatabase
类CreatePostViewController:UIViewController、UIPickerViewDataSource、UIPickerViewDeleteGate、UIExtFieldDelegate{
@ibextfield:UITextField!
@IBOutlet弱var activityTextField:UITextField!
@IBMOutlet弱var控制台ExtField:UITextField!
@IBMOutlet弱var skillTextField:UITextField!
@IBMOutlet弱var通信文本字段:UITextField!
@IBOutlet弱变量lfglfmTextField:UITextField!
@IBMOutlet弱var rulesTextView:UITextView!
@IBMOutlet弱变量descriptionTextView:UITextView!
var游戏=[《刺客信条的起源》、《战场1》、《使命召唤:先进战争》、《使命召唤:黑色行动III》、《使命召唤:幽灵》、《使命召唤:无限战争》、《使命召唤:现代战争翻拍》、《使命召唤:二战》、《命运》、《命运2》、《国际足联16》、《国际足联17》、《国际足联18》、《火箭联盟》]
var控制台=[“Xbox One”、“Xbox 360”、“Playstation 4”、“Playstation 3”]
var skill=[“成功者”、“探险家”、“杀手”、“社交者”]
var通信=[“话筒”,“无话筒”]
变量lfglfm=[“LFG”,“LFM”]
var itemSelected=“”
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后执行任何其他设置。
//从textview中删除边距/填充
self.rulesTextView.TextContainerSet=.0
self.rulesTextView.contentInset=UIEdgeInsetsMake(0,-5,0,0)
//self.descriptionTextView.TextContainerSet=.0
//self.descriptionTextView.contentInset=UIEdgeInsetsMake(0,-5,0,0)
//允许点击屏幕以从屏幕中删除文本字段输入
self.view.addgestureRecognitizer(UIAPTgestureRecognitizer)(目标:self.view,操作:#选择器(UIView.endEditing(:))
//采摘器
让pickerView=UIPickerView()
pickerView.delegate=self
pickerView.dataSource=self
gameTextField.inputView=pickerView
consoleTextField.inputView=pickerView
skillTextField.inputView=pickerView
communicationTextField.inputView=pickerView
lfglfmTextField.inputView=pickerView
更新Epicker()
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
//更新pickerView
func updatePicker(){
让pickerView=UIPickerView()
重新加载所有组件()
}
func pickerView(pickerView:UIPickerView,numberOfRowsInComponent:Int)->Int{
如果gameTextField.isFirstResponder{
返回游戏。计数
}如果consoleTextField.isFirstResponder{
返回控制台。计数
}如果skillTextField.isFirstResponder{
返回技能。计数
}否则,如果communicationTextField.isFirstResponder{
返回通信。计数
}如果lfglfmTextField.isFirstResponder{
返回lfglfm.count
}
}
func pickerView(pickerView:UIPickerView,titleForRow行:Int,forComponent组件:Int)->字符串{
如果gameTextField.isFirstResponder{
返回游戏[世界其他地区]
}如果consoleTextField.isFirstResponder{
返回控制台[世界其他地区]
}如果skillTextField.isFirstResponder{
返回技能[行]
}否则,如果communicationTextField.isFirstResponder{
返回通信[世界其他地区]
}如果lfglfmTextField.isFirstResponder{
返回lfglfm[行]
}
}
func pickerView(pickerView:UIPickerView,didSelectRow行:Int,不完整组件:Int){
如果gameTextField.isFirstResponder{
让itemselected=游戏[行]
gameTextField.text=itemselected
}如果consoleTextField.isFirstResponder{
让itemselected=控制台[行]
consoleTextField.text=itemselected
}如果skillTextField.isFirstResponder{
让itemselected=技能[行]
skillTextField.text=itemselected
}否则,如果communicationTextField.isFirstResponder{
let itemselected=通信[行]
CommunicationContextField.text=itemselected
}如果lfglfmTextField.isFirstResponder{
让itemselected=lfglfm[行]
lfglfmTextField.text=itemselected
}
}
@iAction func createPostTapped(uSender:ui按钮){
如果让uid=Auth.Auth().currentUser?.uid{
Database.Database().reference().child(“用户名”).child(uid).observeSingleEvent(of:.值,带:{
(快照)在
如果让userDictionary=snapshot.value为?[字符串:AnyObject]{
用于用户字典中的用户{
如果让username=user.value为?字符串{
如果让game=self.gameTextField.text{
如果let activity=self.activityTextField.text{
如果让console=self.consoleTextField.text{
如果let skill=self.skillTextField.text{
如果let communication=self.communicationextfield.text{
如果让lfglfm=self.lfglfmTextField.text{
如果let description=self.descriptionTextView.text{
让postObject:字典=[
“uid”:uid,
“用户名”:用户名,
“游戏”:游戏,
var textFieldSelected = UITextField()
func textFieldDidBeginEditing(_ textField: UITextField) {
textFieldSelected = textField
}
func doneSelection(){
if textFieldSelected == yourTextField(in which you want to enter your data)
{
yourTextField.text = data you want to enter from picker
}
}
import UIKit
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate, UITextFieldDelegate {
@IBOutlet weak var gameTextField: UITextField!
@IBOutlet weak var activityTextField: UITextField!
@IBOutlet weak var consoleTextField: UITextField!
@IBOutlet weak var skillTextField: UITextField!
@IBOutlet weak var communicationTextField: UITextField!
@IBOutlet weak var lfglfmTextField: UITextField!
var games = ["Assassin's Creed Origins", "Battlefield 1", "Call of Duty: Advanced Warfare", "Call of Duty: Black Ops III", "Call of Duty: Ghosts", "Call of Duty: Infinite Warfare", "Call of Duty: Modern Warfare Remastered", "Call of Duty: WWII", "Destiny", "Destiny 2", "Fifa 16", "Fifa 17", "Fifa 18", "Rocket League"]
var console = ["Xbox One", "Xbox 360", "Playstation 4", "Playstation 3"]
var skill = ["Achiever", "Explorer", "Killer", "Socializer"]
var communication = ["Mic", "No Mic"]
var lfglfm = ["LFG", "LFM"]
var itemSelected = ""
weak var pickerView: UIPickerView?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
//remove margin / padding from textview
// self.descriptionTextView.textContainerInset = .zero
// self.descriptionTextView.contentInset = UIEdgeInsetsMake(0, -5, 0, 0)
//allow tap on screen to remove text field input from screen
self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:))))
//UIPICKER
let pickerView = UIPickerView()
pickerView.delegate = self
pickerView.dataSource = self
gameTextField.delegate = self
consoleTextField.delegate = self
skillTextField.delegate = self
communicationTextField.delegate = self
lfglfmTextField.delegate = self
gameTextField.inputView = pickerView
consoleTextField.inputView = pickerView
skillTextField.inputView = pickerView
communicationTextField.inputView = pickerView
lfglfmTextField.inputView = pickerView
//It is important that goes after de inputView assignation
self.pickerView = pickerView
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func textFieldDidBeginEditing(_ textField: UITextField) {
self.pickerView?.reloadAllComponents()
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if gameTextField.isFirstResponder{
return games.count
}else if consoleTextField.isFirstResponder{
return console.count
}else if skillTextField.isFirstResponder{
return skill.count
}else if communicationTextField.isFirstResponder{
return communication.count
}else if lfglfmTextField.isFirstResponder{
return lfglfm.count
}
return 0
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if gameTextField.isFirstResponder{
return games[row]
}else if consoleTextField.isFirstResponder{
return console[row]
}else if skillTextField.isFirstResponder{
return skill[row]
}else if communicationTextField.isFirstResponder{
return communication[row]
}else if lfglfmTextField.isFirstResponder{
return lfglfm[row]
}
return nil
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if gameTextField.isFirstResponder{
let itemselected = games[row]
gameTextField.text = itemselected
}else if consoleTextField.isFirstResponder{
let itemselected = console[row]
consoleTextField.text = itemselected
}else if skillTextField.isFirstResponder{
let itemselected = skill[row]
skillTextField.text = itemselected
}else if communicationTextField.isFirstResponder{
let itemselected = communication[row]
communicationTextField.text = itemselected
}else if lfglfmTextField.isFirstResponder{
let itemselected = lfglfm[row]
lfglfmTextField.text = itemselected
}
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}