I've created a SignUp page (ViewController) and on gender selection I'm using a UISegmentedControl for "male", "female", "indifferent". But how can I get the value from the UISegmentedControl and put in a dictionary? I'm using a custom Dictionary<String, String> = [:]
for signup but the UISegmentedControl is not a string (obviously) and I get the error:
Cannot assign value of type 'UISegmentedControl' to type 'String'
How can I convert the result of UISegmentedControl to receive those values?
import UIKit
import FirebaseAuth
import Firebase
class SignUpViewController: UIViewController{
@IBOutlet weak var nameField: UITextField!
@IBOutlet weak var emailField: UITextField!
@IBOutlet weak var birthdayField: UITextField!
@IBOutlet weak var passwordField: UITextField!
@IBOutlet weak var confirmpasswordField: UITextField!
@IBOutlet weak var instagramuserField: UITextField!
@IBOutlet weak var generoSegmentControl: UISegmentedControl!
@IBOutlet weak var DatePickerDate: UITextField!
@IBOutlet weak var signupOutlet: UIButton!
@IBAction func signupAction(_ sender: Any) {
if let name = self.nameField.text {
if let email = self.emailField.text {
if let birthday = self.birthdayField.text {
if let password = self.passwordField.text {
if let confirmpassword = self.confirmpasswordField.text {
if let instagramuser = self.instagramuserField.text {
if let gender = self.generoSegmentControl {
if password == confirmpassword {
print("Senhas iguais, podemos seguir")
}else {
print("As senhas precisam ser iguais")
}
self.auth.createUser(withEmail: email, password: password) { (user, error) in
if error == nil {
var user: Dictionary<String, String> = [:]
user["nome"] = name
user["email"] = email
user["nascimento"] = birthday
user["instagram"] = instagramuser
user["genero"] = gender
//Encoding email for Base 64
let key = Base64().encodingStringBase64(text: email)
let users = self.database.reference().child("usuarios")
users.child(key).setValue(user)
print("Sucesso ao cadastrar usuário!")
}else{
print("Erro ao cadastrar usuário, tente novamente!")
}
}
}else {
print("Escolha seu genero")
}
}else{
print("O campo usuário do instagram esta vazio")
}
}else{
print("As senhas não conferem")
}
}else{
print("Digite uma senha")
}
}else{
print("Digite a data do seu nascimento")
}
}else{
print("Digite seu e-mail")
}
}else{
print("Digite seu nome")
}
}
@IBAction func generoAction(_ sender: Any) {
let genIndex = generoSegmentControl.selectedSegmentIndex
switch genIndex {
case 0:
print("Homem")
case 1:
print("Mulher")
case 2:
print("Indiferente")
default:
print("Nada selecionado")
}
}
}
You get the segmentedControl
in your code, but not it's selectedSegmentIndex
property. Then after receiving the selectedSegmentIndex, you should get the title for that index from control. Update your code with following:
if let gender = self.generoSegmentControl {
Either change it to:
let genderIndex = self.generoSegmentControl.selectedSegmentIndex
if let gender = self.generoSegmentControl.titleForSegment(at: genderIndex) {
}
OR change the way you update dictionary:
let index = gender.selectedSegmentIndex
if let segmentTitle = gender.titleForSegment(at: index) {
user["nome"] = name
user["email"] = email
user["nascimento"] = birthday
user["instagram"] = instagramuser
user["genero"] = segmentTitle
}