Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 具有不同数组的每个文本字段的UIPickerView(Swift/Firebase)_Ios_Swift_Firebase_Uipickerview - Fatal编程技术网

Ios 具有不同数组的每个文本字段的UIPickerView(Swift/Firebase)

Ios 具有不同数组的每个文本字段的UIPickerView(Swift/Firebase),ios,swift,firebase,uipickerview,Ios,Swift,Firebase,Uipickerview,我试图创建一个表单,其中每个文本字段都有一个UIPickerView,用户可以使用它来选择所需的选项。我需要为每个文本字段使用一个不同的信息数组,但我似乎无法让它工作,我已经在它上面停留了很长一段时间了 我有一个可能有效的方法,但是我无法从Firebase的文本字段中检索数据,因为每个字段都有相同的名称 这是我迄今为止的代码,这是我尝试过的最新方法,但不起作用: import UIKit import Firebase import FirebaseDatabase class CreateP

我试图创建一个表单,其中每个文本字段都有一个UIPickerView,用户可以使用它来选择所需的选项。我需要为每个文本字段使用一个不同的信息数组,但我似乎无法让它工作,我已经在它上面停留了很长一段时间了

我有一个可能有效的方法,但是我无法从Firebase的文本字段中检索数据,因为每个字段都有相同的名称

这是我迄今为止的代码,这是我尝试过的最新方法,但不起作用:

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.
     }
     */

}