2008-12-23 19 views
103

चलो कहते हैं कि मैं निम्नलिखित कोड डालें:एक यूआईटीएक्स्टफिल्ड का मान प्राप्त करना क्योंकि कीस्ट्रोक दर्ज किए गए हैं?

IBOutlet UITextField* nameTextField; 
IBOutlet UILabel* greetingLabel; 

मैं greetingLabel चाहते हैं पढ़ने के लिए "नमस्ते [nameTextField]" जैसे ही उपयोगकर्ता किसी भी कुंजी प्रेस के रूप में।

मुझे मूल रूप से कोको प्रतिनिधि प्रतिनिधि विधि controlTextDidChange के आईफोन समकक्ष की आवश्यकता है।

textField:shouldChangeCharactersInRange: प्रतिनिधि विधि हर बार एक कीस्ट्रोक होता है कहा जाता है:

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

स्ट्रिंग तर्क चरित्र कि दबाया जाता है देता है। वास्तविक textField का मूल्य (nameTextField.text) हालांकि खाली रहता है।

मुझे यहां क्या याद आ रही है? (मुझे nameTextField चाहिए जो उपयोगकर्ता ने अभी तक दर्ज की गई सटीक स्ट्रिंग को प्रतिबिंबित करने के लिए)।

उत्तर

189

यह पता चला, सबसे आसान तरीका यह करने के लिए उपयोग कर रहा है इंटरफ़ेस बिल्डर:

  • एक IBAction (इस मामले में के रूप में, ViewController के लिए, कहते हैं)
  • Ctrl-क्लिक (या राइट क्लिक करें) इंटरफ़ेस बिल्डर में UITextField पर
  • पहले चरण में फ़ाइल के स्वामी के IBAction में "संपादन बदल गया" ईवेंट कनेक्ट करें।

एक आकर्षण की तरह काम करता है :) (मैं विश्वास नहीं कर सकता कि मैं इस पर कई दिन बिताए, और अब एहसास है कि समाधान बहुत सरल की तुलना में मैं सोचा था था: पी)

+2

धन्यवाद! मैं "वैल्यू चेंज" का उपयोग कर रहा था जैसे आप यूआईएसलाइडर के साथ उपयोग करेंगे। दिलचस्प है कि उनके पास दो घटनाएं होंगी जो समान व्यवहार मानती हैं। – wjl

+5

यह भयानक सामान है !! अपना समाधान साझा करने के लिए धन्यवाद। – Myxtic

+1

किसी कारण से मैं अभी भी ऐसा करने के लिए एक प्रोग्रामिक तरीका चाहता था ... लेकिन मैंने दिया ... इस विधि चट्टानों! साझा करने के लिए धन्यवाद ... मैंने इसे पहले देखा था लेकिन कोडिंग के दिनों के बाद मेरे दिमाग अब काम नहीं कर रहा है। –

101

आप पाठ क्षेत्र पर घटना UIControlEventEditingChanges के लिए एक कार्य रजिस्टर कर सकते हैं:

[nameTextField addTarget:self action:@selector(updateLabelUsingContentsOfTextField:) forControlEvents:UIControlEventEditingChanged]; 

...

// TODO: error checking 

- (void)updateLabelUsingContentsOfTextField:(id)sender { 

    greetingLabel.text = [NSString stringWithFormat:@"Hello %@", ((UITextField *)sender).text]; 

} 
+0

वहाँ एक रास्ता है इंटरफ़ेस बिल्डर का उपयोग करके इसे निर्दिष्ट करने के लिए? – PlagueHammer

+0

आह .. इसे मिला :) नीचे दिए गए मेरे उत्तर में विवरण। – PlagueHammer

10

UITextField एक अधिसूचना UITextFieldTextDidChange जो हर बार पाठ परिवर्तन करता है, तो के सक्रिय होने का है आप इसके लिए पंजीकरण करते हैं। बस उस अधिसूचना के लिए पंजीकरण करें और अधिसूचना द्वारा बुलाए गए तरीके में, लेबल के पाठ को बदलें।

इसमें जोड़ने के लिए, आपके अधिसूचना हैंडलर को पारित ऑब्जेक्ट में UITextField का टेक्स्ट होगा।

आशा है कि मदद करता है।

+0

यह मेरे लिए दिन बचाया-धन्यवाद! – mpemburn