Search code examples
swiftdatabasefirebaseuisegmentedcontrol

How to reflect select result of UISegmentedControl in Firebase'S Database


Hello I'm newbie in programming (Swift/Firebase) and developing application. Now is trying to make a user profile to be connected to database. I could do it for TextFields data, but cannot do the same with UISegmentedControl for Male/Female switch.

@IBAction func saveProfileButton(_ sender: Any) {
        if nameTextField.text! == "" {
            print("enter something")
        } else {
            addUser()
        }
}

@objc func valuChange() {
    switch genderSegControl.selectedSegmentIndex {
        case 0:
            let zero = String("Male")
        case 1:
           let one = String("Female")
        default:
            return
    }
}

func addUser() {
    let  genderChanged = genderSegControl?.addTarget(self, action: #selector(MainViewController.valuChange), for: UIControlEvents.valueChanged)
    let userGender = String(describing: genderChanged!)
    let uidUser = Auth.auth().currentUser?.uid
    let user = ["...": ..., "userGender":  userGender as! String] 
    refUsers.child(uidUser!).setValue(user)
}

but when I check Firebase's Database nodes it shows "userGender: Optional(())" and only. I tried in many different ways but couldn't get it to be shown like "userGender: Male" or "userGender: Female".

Would appreciate any advice.


Solution

    1. Create outlet for UISegementControl in your ViewController, say genderControl.
    2. In addUser() function, use the selectedIndex of the UISegementControl to determine the value as follows, say index 0 is for MALE & 1 is for FEMALE then:

      let gender = genderControl.selectedIndex == 0 ? "Male" : "Female"

    3. Now set this value gender in user dictionary, i.e.

      let user = ["...": ..., "userGender": gender]