यहां देखने का एक तरीका सेट डिलीगेट: विधि को ओवरराइड करना है और फिर कुछ संदेश अग्रेषण करना है। आप यह सुनिश्चित करने के लिए [super setDelegate: self]
का उपयोग कर सकते हैं कि आपकी कॉल प्रतिनिधि संदेशों पर पहली बार आती है। सेटडिलेगेट के अपने ओवरराइड में: एक आंतरिक इवर सेट करें, उदा।
- (void) setDelegate: (id<UITextFieldDelegate>) internalDelegate;
{
[setInternalDelegate: internalDelegate];
}
फिर यूआईटीएक्स्टफाल्ड प्रतिनिधि पद्धतियों में से प्रत्येक के लिए प्रतिनिधि संदेश पर अग्रेषित करने से पहले अपनी बात करें, उदा।
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
{
// do your thing with range and replacement string
// now forward message on the 'other' delegate
[[self internalDelegate] textField: self shouldChangeCharactersInRange: range replacementString: string];
}
आमतौर पर, आप प्रतिनिधि तरीकों के सभी ओवरराइड करने के लिए, भले ही उनमें तुम सब के अधिकांश के लिए एक सीधे आगे है चाहता हूँ।
अद्यतन आप टिप्पणियों में ध्यान देते हैं कि अग्रेषण दृष्टिकोण मुद्दों को उठा रहा है। यदि ऐसा है, तो पारंपरिक प्रतिनिधिमंडल जाने का रास्ता है। (और, आम तौर पर, यह जाने का तरीका है - हालांकि मैंने एक या दो बार प्रतिनिधि को अग्रेषित करने का उपयोग किया है, मुझे यकीन नहीं है कि, हिंडसाइट के साथ, यह बिल्कुल जरूरी था और मैंने यह देखने के लिए जांच नहीं की है कि क्या मैं 'UITextField के साथ यह किया है। @Scott Corscadden है और यह सिफारिश नहीं करता।)
सबसे आम पैटर्न ViewController उस दृश्य जिसमें UITextField
एक subview प्रतिनिधि है के बाद लग रहा है बनाने के लिए है। यदि आपके पास उपclass के साथ काम करने की आवश्यकता है तो आप अपने उत्तर में नहीं कहते हैं। यदि आप UITextField
में दिलचस्प सामग्री पैक कर रहे हैं तो यह हो सकता है कि, आप हमेशा एक और पोस्टर सुझा सकते हैं और UITextField
के लिए एक साथी वर्ग बना सकते हैं जो उस काम को करता है और प्रतिनिधि के रूप में उपयोग करता है। किसी भी मामले में, यदि आवश्यकता हो, तो आप अपने UITextField
सबक्लास पर अतिरिक्त विधियों को कॉल करने के लिए हमेशा प्रतिनिधि ऑब्जेक्ट प्राप्त कर सकते हैं, उदा।
// in the delegate object class
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
{
[delegate doSomeExtraThingInTheTextFieldSubclassThatItSeemsToMakeSenseToDoThereRatherThanHere];
// maybe that's it, or maybe this object also wants to do something here...
}
आप स्पष्ट कर सकते हैं? यह तुरंत स्पष्ट नहीं है कि आप टेक्स्टफिल्ड का उपयोग क्यों नहीं करेंगे: चाहिएChangeCharactersInRange:, यानी subclass को अपने उदाहरणों को अपने स्वयं के प्रतिनिधियों के रूप में सेट करने के लिए मिलता है। – Obliquely
इसे अपने स्वयं के प्रतिनिधि के रूप में स्थापित करने में एकमात्र समस्या एक वास्तविक प्रतिनिधि को घटनाओं को अग्रेषित कर रही है जो यूआईटीएक्स्टफिल्ड घटनाओं का जवाब दे सकती है। वर्तमान में, मैं addTarget का उपयोग कर रहा हूं: क्रिया: forControlEvent: आंतरिक रूप से उन घटनाओं का जवाब देने के लिए। –