swift在alertview文本域中获取nil值

时间:2016-08-09 05:00:04

标签: ios swift uitextfield

我使用SCLAlertView Framework作为我的警报视图。 https://github.com/vikmeup/SCLAlertView-Swift

我使用textfield创建一个alertview。这是代码。

let emailSubmit: UITextField = UITextField()
let passwordSubmit: UITextField = UITextField()
var email: String?
var password: String?

//This function call when loginbutton tapped
func showLogin(){

    let alertView = SCLAlertView()

    let emailSubmit = alertView.addTextField("Enter your Email")
    let passwordSubmit = alertView.addTextField("Password")

    email = emailSubmit.text
    password = passwordSubmit.text
    passwordSubmit.secureTextEntry = true

    alertView.addButton("Confirm", target:self, selector:#selector(ViewController.submitLogin))

    alertView.showTitle(
      "Login",
      subTitle: "",
      duration: nil,
      completeText: "Cancel",
      style: .Info)
  }

它要求我为按钮添加一个功能。函数名称是submitLogin。它用于将登录详细信息(textfield.text)发送到后端服务器。但是,单击提交按钮后,它只返回nil值     这是提交登录按钮功能

func submitLogin(){
let email = emailSubmit.text!
let password = passwordSubmit.text!

print("\(email),\(password)")
}

但是,点击提交按钮时显示为任何人都可以指出代码有什么问题吗?

2 个答案:

答案 0 :(得分:2)

我认为您的代码中存在两个不同的emailSubmitpasswordSubmit变量。函数showLogin之外的那个是你在submitLogin方法中使用的那个,但是那些字段在第1行和第2行初始化时没有任何值。还有另一个实例被初始化并添加到{{1在SCLAlertView方法内部并显示但其值不会被使用。

您可能应该使用showLogin,就像sample code

中建议的方式一样

答案 1 :(得分:1)

守则应该是这样的:

var email: String?
var password: String?

//This function call when loginbutton tapped
@IBAction func showLogin(){

    let alertView = SCLAlertView()

    let emailSubmit = alertView.addTextField("Enter your Email")
    let passwordSubmit = alertView.addTextField("Password")

    passwordSubmit.secureTextEntry = true

    alertView.addButton("Confirm") {
        self.email = emailSubmit.text
        self.password = passwordSubmit.text

        self.submitLogin()
    }

    alertView.showTitle(
        "Login",
        subTitle: "",
        duration: nil,
        completeText: "Cancel",
        style: .Info)
}

func submitLogin(){
    print("\(email),\(password)")
}

<强>解释

在用户按下确认按钮之前,代码行password = passwordSubmit.textvar password设置为nil,与var email相同。

并且不需要定义电子邮件和密码文本字段,因为alertview将在其自身内创建文本字段。