2011-11-07 8 views
6

UITextView में ईवेंट कुंजीपटल को संभालने के लिए बदल गया है। हालांकि UITextField ऐसी घटना नहीं है।मैं UITextField में एक कुंजीपटल ईवेंट का पता कैसे लगा सकता हूं?

मैं UITextField में एक कुंजीपटल ईवेंट का पता कैसे लगा सकता हूं?

सूचनाओं का उपयोग करके here वर्णित एक विधि है, हालांकि मेरी समस्या यह है कि मैं TextFieldTextDidChangeNotification से सदस्यता समाप्त नहीं कर सकता।

उत्तर

3

मुझे यकीन नहीं है कि आपका प्रश्न कौन सा है। ऐसा लगता है कि आपने स्वयं को उत्तर दिया है, यानी समाधान (आपके लिंक से) NSNotificationCenter.DefaultCenter.AddObserver का उपयोग करना है।

दूसरा सदस्यता रद्द कर रहा है - यदि आप देखना बंद करना चाहते हैं तो आपको पिछले विधि समकक्ष को कॉल करना चाहिए, यानी NSNotificationCenter.DefaultCenter.RemoveObserver

बस ऑब्जेक्ट को AddObserver से वापस रखें ताकि आप इसे RemoveObserver पर आपूर्ति कर सकें।

ध्यान दें: मैं आपके सवाल का सही ढंग से समझ नहीं किया, तो संपादित का उपयोग करें और कुछ विवरण और/या आप क्या हासिल करना चाहते का कोड जोड़ सकते हैं और हम :-)

+0

धन्यवाद poupou भविष्य में किसी को मदद मिलेगी, मैं हॉपिंग गया था कि वहाँ एक आसान तरीका हो सकता है। AddObserver से लौटाई गई ऑब्जेक्ट पर एक संदर्भ धारण करने से मैं अधिसूचना –

1
मदद करने के लिए हर संभव प्रयास करेंगे कृपया UITextFieldDelegate

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextFieldDelegate_Protocol/UITextFieldDelegate/UITextFieldDelegate.html

पर

देखो कि प्रोटोकॉल को लागू करें। इसमें सभी टेक्स्ट फ़ील्ड परिवर्तनों के लिए कॉल बैक विधियां हैं।

+0

से सदस्यता समाप्त करने में सक्षम था, ऐसा कोई ईवेंट नहीं है जो कीप्रेस की तरह काम करता है –

+1

मैं 'टेक्स्टफिल्ड: चाहिए चेंज चेंक्टर्स इनरेंज: प्रतिस्थापन स्ट्रिंग:' विधि, जिसे * * पर निकाल दिया गया है हर कुंजीपटल, जैसा कि मैं कह सकता हूं। हालांकि, बमर यह है कि आपको 'replacementString:' मान का अध्ययन करना होगा, क्योंकि यह संदेश भेजा जाने पर 'textField.text' प्रॉपर्टी को अपडेट नहीं किया जाएगा। – colinta

2

colinta के रूप में सुझाव दिया, ऐसा करते हैं

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSString *text = [textField.text stringByReplacingCharactersInRange:range withString:string]; 
    NSLog(@"range = %@, replacement = %@, text = %@", NSStringFromRange(range), string, text); 
    return YES; 
} 

और

- (BOOL)textFieldShouldClear:(UITextField *)textField { 
    NSLog(@"clear text"); 
    return YES; 
} 

यह भी अगर इनपुट वर्तनी सुझाव के माध्यम से बदल गया था काम करेंगे।

+0

यदि आप टेक्स्ट फ़ील्ड संपादन के दायरे से बाहर कीप्रेस को प्रतिक्रिया देने की आवश्यकता है तो यह काम नहीं करेगा। उदाहरण के लिए, कहें कि आपको एक सिंगल कीप्रेस कैप्चर करने और अगले फ़ील्ड में जाने की आवश्यकता है। आप इस विधि का उपयोग कर ऐसा नहीं कर सकते हैं। आपको कीबोर्ड कार्यक्रमों का उपयोग करना होगा। –

0

UITextField परिवर्तन निरीक्षण करने के लिए स्पष्ट तरीका

_textField.AddTarget((sender, e) => 
{ 
    // Do your stuff in here 
}, UIControlEvent.EditingChanged); 

है आप एक पूरे सिस्टम में सूचना केंद्र की सदस्यता के लिए नहीं है और आप पर्यवेक्षक जब आप एक पाठ क्षेत्र destroing रहे अपंजीकृत करने की जरूरत नहीं है ।

आशा इस :)