Select UIAlertController 的文本字段中的文本
Select text in UIAlertController's text field
我需要在显示 UIAlertController 后立即 select 编辑文本字段的文本。但是,我 select 在标准 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)
})
有什么想法吗?
我重写了你的代码。您的 class 应该符合 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()
}
}
谢谢,@ridvankucuk。您的解决方案效果很好。
但是文本域委托函数可以稍微简化一下:
func textFieldDidBeginEditing(_ textField: UITextField) {
textField.selectAll(nil)
}
无需添加委托即可select所有文本的方法:
present(vc, animated: true) {
vc.textFields?.first?.selectAll(nil)
}
我需要在显示 UIAlertController 后立即 select 编辑文本字段的文本。但是,我 select 在标准 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)
})
有什么想法吗?
我重写了你的代码。您的 class 应该符合 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()
}
}
谢谢,@ridvankucuk。您的解决方案效果很好。
但是文本域委托函数可以稍微简化一下:
func textFieldDidBeginEditing(_ textField: UITextField) {
textField.selectAll(nil)
}
无需添加委托即可select所有文本的方法:
present(vc, animated: true) {
vc.textFields?.first?.selectAll(nil)
}