2009-11-17 9 views
9

self.delegate = self; ऐसा करने में क्या गलत है? और इसे करने का सही तरीका क्या है?self.delegate = self; ऐसा करने में क्या गलत है?

धन्यवाद, श्रीमान।

कोड:

(UITextField*)initWith:(id)sender:(float)X:(float)Y:(float)width:(float)hieght:(int)textFieldTag { 
    if (self = [super initWithFrame:CGRectMake(X, Y,width, hieght)]) { 
     finalText = [[NSMutableString alloc] initWithString:@""]; 
     senderObject = sender; 
     self.textColor = [UIColor blackColor]; 
     self.font = [UIFont systemFontOfSize:17.0]; 
     self.backgroundColor = [UIColor whiteColor]; 
     self.autocorrectionType = UITextAutocorrectionTypeNo; 
     self.keyboardType = UIKeyboardTypeDefault;  
     self.returnKeyType = UIReturnKeyDone; 
     self.clearButtonMode = UITextFieldViewModeWhileEditing;  
     self.tag = textFieldTag;   
     self.delegate = self;  
     [sender addSubview:self]; 
    } 
    return self; 
} 

नोट्स: यह एक पाठ क्षेत्र है, और जब मैं किसी अन्य वस्तु के लिए प्रतिनिधि की स्थापना कर रहा हूँ (self.delegate = mainView) सब कुछ ठीक काम करता है, लेकिन फिर मैं करना होगा मुख्य दृश्य में प्रतिनिधि विधियों को लागू करें, और मैं उन्हें स्वयं में रखना चाहता हूं (एक uiTextField क्लास जो मैंने बनाया है)। अगर मैं self.delegate = self सेट कर रहा हूं, तो मुझे टेक्स्ट फ़ील्ड मिलता है लेकिन कीबोर्ड दिखाई नहीं देता है।

+0

कृपया स्पष्ट करें: आप क्यों जानते हैं कि मैं गलत हूं। क्या हो रहा है –

+0

हाय। यह एक टेक्स्ट फ़ील्ड है, और जब मैं प्रतिनिधि को किसी अन्य ऑब्जेक्ट (self.delegate = mainView) पर सेट कर रहा हूं, तो सब कुछ ठीक काम करता है, लेकिन फिर मुझे मुख्य दृश्य में प्रतिनिधि विधियों को लागू करना होगा, और मैं उन्हें स्वयं में रखना चाहता हूं (एक uiTextField वर्ग जो मैंने बनाया है)। यदि मैं self.delegate = self सेट कर रहा हूं, तो मुझे टेक्स्ट फ़ील्ड मिलता है लेकिन कीबोर्ड दिखाई नहीं देता है। – Tiger

+0

प्रश्न में ओपी से टिप्पणी जोड़ा गया। –

उत्तर

12

इस सूत्र देखें

http://www.cocoabuilder.com/archive/cocoa/241465-iphone-why-can-a-uitextfield-be-its-own-delegate.html#241505

मूल रूप से, जब आप खुद के साथ अपने UITextField पर क्लिक करें रूप में एक प्रतिनिधि है कि respondsToSelector ही बुला रहा है कि "फ्रीज" के लिए कारण -> अनंत प्रत्यावर्तन।

UITextField अद्वितीय AFAIK है। आप आमतौर पर किसी विशेष समस्या के साथ अपने स्वयं के प्रतिनिधि के रूप में कक्षा का उपयोग कर सकते हैं। यूआईटीएक्स्टफिल्ड के लिए आपको एक वास्तविक प्रतिनिधि बनाना होगा (जो निश्चित रूप से, यूआईटीएक्स्टफिल्ड पर कॉल विधियों के लिए कॉल कर सकता है जिसके लिए यह एक प्रतिनिधि है। अगर आप एआरसी का उपयोग कर रहे हैं तो भी बरकरार रखने के लिए सावधान रहें, )।

+1

FYI: आईओएस 8 आगे self.delegate = self संदर्भ की अनुमति देता है। –

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