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

Posted

技术标签:

【中文标题】ios Swift 2:扩展 - 带有文本字段的警报【英文标题】:ios Swift 2: extension - Alert with textfield 【发布时间】:2016-09-01 09:54:24 【问题描述】:

我正在尝试使用带有扩展名 uialertcontroller 的文本字段的 uialertcontroller 创建一个函数

这是我的代码:

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)


好的,我对“self”这个词有疑问,我找不到解决方案,请问有什么办法可以解决这个问题??

【问题讨论】:

我已经问过这个问题了。你可以在这里找到它:***.com/questions/26567413/…。 :) 【参考方案1】:

对于你的第一个自我问题,我建议你做这样的事情

    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!

您可以在静态方法中接受 UITextFieldDelegate 对象并将其分配给委托,对于您的第二个问题,您声明弱自我但不在闭包中使用它,因此只需删除它,您的代码应该可以正常工作。

【讨论】:

以上是关于ios Swift 2:扩展 - 带有文本字段的警报的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift3 ios中使用键盘返回键将一个文本字段移动到另一个文本字段

点击文本字段时用选择器视图替换键盘(Swift、Storyboard、iOS 9、Xcode 7)

Swift iOS - TextField 初始宽度错误的底部边框

在swift中添加文本字段内的前缀(iOS)

如何使用Swift在iOS 8上显示带有文本的活动指示器?

使用swift 2仅使用顶部和底部边框的文本字段