एक UITextField के मान के रूप में कीस्ट्रोक्स दर्ज किए जा रहे हैं?


107

मान लीजिए कि मेरे पास निम्नलिखित कोड हैं:

IBOutlet UITextField* nameTextField;
IBOutlet UILabel* greetingLabel;

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

मुझे मूल रूप से कोको प्रतिनिधि पद्धति का iPhone समकक्ष चाहिए controlTextDidChange

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

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

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

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

जवाबों:


197

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

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

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


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

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

8
@AlbertRenshaw लेकिन आप इसे प्रोग्रामेटिक तरीके से कर सकते हैं;) बस प्रदर्शन करें [textField addTarget:self action:@selector(textFieldEditingChanged:) forControlEvents:UIControlEventEditingChanged];)।
विवे

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];

}

क्या इंटरफ़ेस बिल्डर का उपयोग करके इसे निर्दिष्ट करने का कोई तरीका है?
प्लेग हैमर

11

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

इसे जोड़ने के लिए, आपके सूचना हैंडलर को दी गई वस्तु का पाठ होगा UITextField

उम्मीद है की वो मदद करदे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.