2012-04-28 4 views
59

मैं UITextField पर अलग UILabel पर किए गए परिवर्तन दिखाने की कोशिश कर रहा हूं। उपयोगकर्ता द्वारा टाइप किए जाने वाले प्रत्येक वर्ण के बाद UITextField का पूरा पाठ कैप्चर करने का कोई तरीका है? वर्तमान में मैं इस विधि का उपयोग कर रहा हूं, लेकिन यह उस अंतिम चरित्र को कैप्चर नहीं करता है जिसे उपयोगकर्ता ने दर्ज किया है।आईफोन टाइप करते समय UITextField के पाठ को कैसे प्राप्त करें?

मुझे पता है कि UITextView में "didChange" विधि है, लेकिन मुझे UITextField के लिए यह विधि नहीं मिल सका।

//does not capture the last character 

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 

     [self updateTextLabelsWithText: textField.text]; 

    return YES; 
} 

कैसे मैं प्रत्येक चरित्र के बाद UITextField से बाहर ले जा सकते हैं पाठ में प्रवेश किया?

धन्यवाद!

+0

जांच: http://stackoverflow.com/questions/388237/getting-the-value-of-a-uitextfield-as-keystrokes-are-entered – hanumanDev

उत्तर

134
  1. पहले स्टोरीबोर्ड के लिए एक UITextField और UILabel जोड़ें/निब
  2. अब आवंटित IBOutletUILabel के लिए मालिक दायर करने के लिए
  3. असाइन UITextFieldDelegate (यहाँ मैं mylabel का इस्तेमाल किया है), भी ज में एक ही प्रतिनिधि को लागू फ़ाइल
  4. कोड की इन पंक्तियों का उपयोग करें:

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
    { 
        NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; 
        [self updateTextLabelsWithText: newString]; 
    
        return YES; 
    } 
    
    -(void)updateTextLabelsWithText:(NSString *)string 
    { 
        [myLabel setText:string]; 
    } 
    

उम्मीद है कि इससे मदद मिलती है।

+0

Hummmmm Thats बहुत अच्छा Thx। ..... :) –

+0

यह मेरे लिए काम करता है .... –

+0

यदि मैं चरित्र को एक-एक करके हटा देता हूं। यह विधि –

67

बस "संपादन बदला गया" घटना

[textField addTarget:self 
       action:@selector(editingChanged:) 
    forControlEvents:UIControlEventEditingChanged]; 

और चयनकर्ता संभाल:

-(void) editingChanged:(id)sender { 
    // your code 
} 

आप इस मैन्युअल रूप से कर सकते हैं, या CTRL-खींचकर स्टोरीबोर्ड के साथ "संपादन में परिवर्तन किया गया" भेजे गए आपके .h पर ईवेंट, संपादन के लिए आपके लिए परिवर्तन विधि।

+3

पर कॉल नहीं कर रही है आपका समाधान सही है! धन्यवाद – SpaceDog

+10

यह वास्तव में एक बेहतर समाधान है जैसा कि स्वीकार किया जाता है। धन्यवाद!। स्वीकार किए गए उत्तर लेबल टेक्स्ट को पूरी तरह से साफ़ नहीं करेंगे जब आप अपने टेक्स्टफील्ड से अंतिम वर्ण हटाते हैं। – Menno

+0

इसे उत्तर – Lucas

5

स्विफ्ट में 2.0+

class CheckInViewController: UIViewController, UITextFieldDelegate { 

override func viewDidLoad() { 
    super.viewDidLoad() 

    yourTextField.delegate = self 

} 

func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool { 
    var updatedTextString : NSString = textField.text as NSString 
    updatedTextString = updatedTextString.stringByReplacingCharactersInRange(range, withString: string) 

    self.methodYouWantToCallWithUpdatedString(updatedTextString) 
    return true 
} 

} 

आशा है कि यह आप तेजी से अग्रदूतों

में मदद करता है
3

addTarget साथ स्विफ्ट स्विफ्ट 2.0+

titleTextField.addTarget(self, action: #selector(textFieldTyping), forControlEvents: .EditingChanged) 

और लागू selector

func textFieldTyping(textField:UITextField) 
{ 
    //Typing 
} 
1

स्विफ्ट 3.0 में:

इनमें से कुछ थे पीछे एक चरित्र, या स्विफ्ट और Obj सी के पिछले संस्करणों के लिए। स्विफ्ट 3.0

कक्षा में मैंने टेक्स्ट प्लेसहोल्डर को टेक्स्ट स्टोर करने की घोषणा की है।

var tempName = "" 

viewDidLoad में मैं प्रयोग किया है:

func typingName(textField:UITextField){ 

     if let typedText = textField.text { 
      tempName = typedText 
      print(tempName) 
     } 
    } 
0

स्विफ्ट 3.0+:: यह मेरे लिए बहुत अच्छी तरह से काम किया

nameField.addTarget(self, action: #selector(typingName), for: .editingChanged) 

तो मैं एक समारोह कहा जाता है बनाया है।

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
    self.yourLabel.text = "\(textField.text ?? "")\(string)" 
    return true 
} 
0
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
     if textField == yourTextFieldOutletName 
     { 
      if yourTextFieldOutletName.isEmpty == false 
      { 
      youtlabelname.text = yourTextFieldOutletName.text! 
      } 


     } 

     return true 

    } 

func textViewDidEndEditing(_ textView: UITextView) { 
     if textField == yourTextFieldOutletName 
      { 
       if yourTextFieldOutletName.isEmpty == false 
       { 
       youtlabelname.text = yourTextFieldOutletName.text! 
       } 


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