在UIAlertController的文本字段中选择文本

时间:2016-03-14 15:35:16

标签: ios swift uialertcontroller uialertaction

我需要在呈现UIAlertController之后立即选择文本字段的文本。但是,我在标准UITextField中选择文本的方式在这里不起作用。

这就是我的尝试,但似乎无法让它发挥作用。

let ac = UIAlertController(title: "Rename", message: nil, preferredStyle: .Alert)
ac.addTextFieldWithConfigurationHandler({
    [] (textField: UITextField) in
    textField.selectedTextRange = textField.textRangeFromPosition(textField.beginningOfDocument, toPosition: textField.endOfDocument)
    textField.text = "filename.dat"
    })
ac.addAction(UIAlertAction(title: "CANCEL", style: .Cancel, handler: nil))
ac.addAction(UIAlertAction(title: "OK", style: .Default, handler: {
    [] Void in
    // do something
    }))
dispatch_async(dispatch_get_main_queue(), {
    self.presentViewController(ac, animated: true, completion: nil)
})

有什么想法吗?

3 个答案:

答案 0 :(得分:11)

我重写了你的代码。您的类应符合UITextFieldDelegate协议并实现textFieldDidBeginEditing方法,如下所示:

class ViewController: UIViewController, UITextFieldDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        let ac = UIAlertController(title: "Rename", message: nil, preferredStyle: .Alert)
        ac.addTextFieldWithConfigurationHandler({
            [] (textField: UITextField) in
            textField.text = "filename.dat"
            textField.delegate = self

        })
        ac.addAction(UIAlertAction(title: "CANCEL", style: .Cancel, handler: nil))
        ac.addAction(UIAlertAction(title: "OK", style: .Default, handler: {
            [] Void in
            // do something
        }))
        dispatch_async(dispatch_get_main_queue(), {
            self.presentViewController(ac, animated: true, completion: nil)
        })

    }
    func textFieldDidBeginEditing(textField: UITextField) {
        textField.selectedTextRange = textField.textRangeFromPosition(textField.beginningOfDocument, toPosition: textField.endOfDocument)
        textField.becomeFirstResponder()
    }

}

答案 1 :(得分:3)

一种在不添加委托的情况下选择所有文本的方法:

present(vc, animated: true) {
    vc.textFields![0].selectAll(nil)
}

答案 2 :(得分:2)

谢谢,@ ingvankucuk。您的解决方案效果很好。

但是textfield委托函数可以简化一点:

func textFieldDidBeginEditing(_ textField: UITextField) {
    textField.selectAll(nil)
}