简体   繁体   English

ios Swift 2:扩展名-带有文本字段的警报

[英]ios Swift 2: extension - Alert with textfield

i'm trying to create a function using a uialertcontroller with textfield using extension uialertcontroller 我正在尝试使用带有扩展名uialertcontroller的文本字段的uialertcontroller创建函数

this is my code : 这是我的代码:

extension UIAlertController{

class func AlertWithTextField(here: String, message1 : String) -> UIAlertController{

    var alertController:UIAlertController?
    alertController = UIAlertController(title: here,
        message: message1,
        preferredStyle: .Alert)

    alertController!.addTextFieldWithConfigurationHandler(
        {(textField: UITextField!) in
            textField.placeholder = "Ex: 1"
            textField.textAlignment = .Center
            textField.delegate = self
            textField.keyboardType = UIKeyboardType.NumberPad
    })
    let action = UIAlertAction(title: "Submit",
        style: UIAlertActionStyle.Default,
        handler: {[weak self]
            (paramAction:UIAlertAction!) in
            if let textFields = alertController?.textFields{
                let theTextFields = textFields as! [UITextField]
                let enteredText = theTextFields[0].text
                print("\n\(enteredText)") }
        })
    let action2 =  UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)
    alertController?.addAction(action)
    alertController?.addAction(action2)

}}

okay, i have problem with the words "self", and i can't found solution for them, what could be the solution for this problem ?? 好的,我对“自我”一词有疑问,但我找不到解决方案,这个问题的解决方案是什么?

For your first self problem, i would suggest you do something like this 对于您的第一个自我问题,我建议您做这样的事情

    class func AlertWithTextField(here: String, message1 : String, delegate:UITextFieldDelegate?) -> UIAlertController{

    var alertController:UIAlertController?
    alertController = UIAlertController(title: here,
                                        message: message1,
                                        preferredStyle: .Alert)

    alertController!.addTextFieldWithConfigurationHandler(
        {(textField: UITextField!) in
            textField.placeholder = "Ex: 1"
            textField.textAlignment = .Center
            textField.delegate = delegate
            textField.keyboardType = UIKeyboardType.NumberPad
    })
    let action = UIAlertAction(title: "Submit",
                               style: UIAlertActionStyle.Default,
                               handler: {(paramAction:UIAlertAction!)->Void in
                                if let textFields = alertController?.textFields {
                                    let theTextFields = textFields
                                    let enteredText = theTextFields[0].text
                                    print("\n\(enteredText)") }
        })
    let action2 =  UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)
    alertController?.addAction(action)
    alertController?.addAction(action2)
    return alertController!
}

You can accept a UITextFieldDelegate object in your static methods and assign it ti the delegate and for your second problem you are declaring weak self but not using it in the closure so just remove that and your code should work fine. 您可以在静态方法中接受UITextFieldDelegate对象,然后将其分配给委托,对于第二个问题,您声明弱的self而不在闭包中使用它,因此只需删除该对象,代码就可以正常工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM