2016-03-14 14 views
6

मुझे UIAlertController प्रस्तुत किए जाने के बाद चयनित टेक्स्ट फ़ील्ड के टेक्स्ट की आवश्यकता है। हालांकि, एक मानक UITextField में पाठ का चयन करने का तरीका यहां काम नहीं करता है।UIAlertController के टेक्स्ट फ़ील्ड में टेक्स्ट का चयन करें

यही मैंने कोशिश की, लेकिन मुझे यह काम नहीं मिल रहा है।

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) 
}) 

कोई विचार?

उत्तर

9

मैंने आपके कोड को फिर से लिखा है। आपका वर्ग 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() 
    } 

} 
2

धन्यवाद, @ridvankucuk। आपका समाधान बहुत अच्छा काम करता है।

लेकिन पाठ फ़ील्ड प्रतिनिधि समारोह छोटा सा सरल किया जा सकता:

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

' से @ ridvankucuk का जवाब। क्या ऐसी स्थितियां हैं जहां उस रेखा को वापस जोड़ा जाना चाहिए? – ToolmakerSteve

+1

@ToolmakerSteve, व्यक्तिगत रूप से, मैंने कभी ऐसी स्थितियों से मुलाकात नहीं की है। पाठ फ़ील्ड पहले से ही पहले प्रतिक्रियाकर्ता है जब 'textFieldDidBegin संपादन:' विधि कहा जाता है। लेकिन हो सकता है कि आपके पास कुछ विशेष मामला हो, जब आपको इसे पहले उत्तरदाता बनाने की आवश्यकता हो। – seelts

1

एक प्रतिनिधि जोड़ने के बिना सभी पाठ का चयन करने के लिए एक तरह से: मैं आप छोड़े गए `textField.becomeFirstResponder (नोटिस)

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

यह मेरे लिए पूरी तरह से काम किया! – lox

संबंधित मुद्दे