2012-01-10 12 views
18

मैं UITextField पर टच इवेंट्स (विशेष रूप से UIControlEventTouchUpInside और UIControlEventTouchUpOutside) पर प्रतिक्रिया देना चाहता हूं, लेकिन UIControlEventTouchCancel पर आने वाली एकमात्र घटना है।मैं UITextField पर टच इवेंट्स का जवाब कैसे दे सकता हूं?

मैं UIControlEventEditingDidBegin का उपयोग नहीं कर सकता, क्योंकि यह तब होता है जब फ़ील्ड लाभ केंद्रित होता है, जो मैं पहचानने की कोशिश नहीं कर रहा हूं। मैं जानना चाहता हूं कि जब उपयोगकर्ता वर्तमान फोकस स्थिति के बावजूद, अपनी उंगली को ले जाता है, और चाहे वह टेक्स्ट फ़ील्ड के अंदर या बाहर था।

क्या कोई इसे पूरा करने का तरीका जानता है?

स्पष्ट होने के लिए मैंने addTarget:action:forControlEvents का उपयोग करने का प्रयास किया है और यह काम नहीं करता है। टच अप इवेंट रद्द करके रोका जाता है।UITextField से पहले स्पर्श करने का एक तरीका चाहते हैं UITextField इसे उपभोग करता है और रद्द ईवेंट का उत्पादन करता है।

इसके अलावा, यदि संभव हो तो मैं कोई अतिरिक्त दृश्य बनाने से बचना चाहता हूं।

उत्तर

-1

प्रोग्रामिंग रूप से अपने वांछित कार्यक्रम के लिए एक लक्ष्य जोड़ें, या, आईबी का उपयोग करें।

UITextField * touchyTextField = [[UITextField alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 21.0)]; 

[touchyTextField addTarget:self 
        action:@selector(yourDesiredMethod) 
      forControlEvents:UIControlEventTouchUpInside]; 
+7

नहीं, यह निश्चित रूप से काम नहीं करता है। पहली चीज मैंने कोशिश की। "YourDesiredMethod" विधि को कभी नहीं कहा जाता है। मैं UIControlEventTouchDown के लिए ईवेंट प्राप्त कर सकता हूं, लेकिन टचअप ईवेंट में से कोई भी निकाल दिया नहीं गया है। इसके बजाय, एक UIControlEventTouchCancel घटना निकाल दिया गया है। मैं सिर्फ इतना है कि घटना घटना मैं या तो चाहते हैं के लिए एक hacky प्रॉक्सी के रूप में, क्योंकि यह भी निकाल दिया जाता है जब देर तक दबाए रखने आवर्धन पाश को लाता है और जब कुछ और इस तरह के एक मॉडल संवाद या लॉक स्क्रीन के रूप में उपयोगकर्ता इनपुट रद्द उपयोग नहीं कर सकते । – theK42

+0

वाह, मैंने माना कि यह किसी भी अन्य UIView आधारित वर्ग की तरह काम करेगा। आप एक कस्टम UITextField बनाने और स्पर्श को ओवरराइड करने में सक्षम हो सकते हैंगेगन: विधि, उचित मामलों में पहला उत्तरदाता बनने के लिए सुनिश्चित करना ताकि कीबोर्ड अभी भी दिखाया जा सके। –

+0

तो, मैंने छेड़छाड़ की कोशिश की कोशिश की/समाप्त/रद्द कर दिया, और उसने मुझे एक बीजेन/रद्द की गई जोड़ी भी दी, बिना किसी समाप्ति घटना के। यह वास्तव में निराशाजनक है! साथ ही, उन तरीकों को ओवरराइड करने से टेक्स्टफिल्ड को पहले उत्तरदाता बनने से रोका नहीं गया था, इसलिए मौका मिलने से पहले बेस क्लास टच हैंडलिंग कर रही है! – theK42

4

अच्छी तरह से कर यह भरने अंतरिक्ष के सभी को कवर करने के स्पष्ट करने के लिए सेट के साथ एक UIButton बनाने के लिए किया जाएगा के रास्ते के बारे में एक दौर है, और यह की चोटी पर एक UITextField। यदि उपयोगकर्ता टेक्स्ट फ़ील्ड में छूता है, तो टेक्स्ट फ़ील्ड को एक ईवेंट भेजना चाहिए, और यदि उपयोगकर्ता टेक्स्ट फ़ील्ड के बाहर छूता है, तो UIButton ईवेंट भेज देगा।

+0

चूंकि मैं टेक्स्टफिल्ड के अंदर छूने से ईवेंट नहीं प्राप्त कर सकता, यह काम नहीं करेगा। यदि संभव हो तो मैं कोई अतिरिक्त विचार बनाने से बचना चाहूंगा। – theK42

2

अच्छा जवाब यहाँ: Change default touch events for UITextField

पाठ क्षेत्र के प्रतिनिधि का प्रयोग करें और क्या आप textFieldShouldBeginEditing में करना चाहते हैं:

आप डिफ़ॉल्ट व्यवहार को रोकने के लिए कोई लौट सकते हैं।

+0

यह बेकार जानकारी नहीं है, यह मुझे इच्छित व्यवहार के करीब आने में मदद कर सकता है। हालांकि यह एक पूर्ण उत्तर नहीं है, क्योंकि यह मुझे स्पर्श करने में मदद नहीं कर सकता है जो मैदान के बाहर शुरू होता है और अंत में 'UIControlEventTouchUpOutside' जैसा होता है। बेशक – theK42

+0

। मुझे आपका प्रश्न ठीक से पढ़ना चाहिए था! – beev

+0

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

0

मुझे आज इस समस्या का सामना करना पड़ा है। मेरा लक्ष्य टेक्स्टफील्ड के पृष्ठभूमि रंग को स्पर्श करने के लिए बदलना था और उसे वापस स्पर्श/रद्द करने पर वापस करना था। यह अजीब बात है कि टच डाउन को यूआईटीएक्स्टफिल्ड से लक्षित करने के लिए भेजा जाता है, लेकिन अंदर स्पर्श करें, बाहर स्पर्श करें और यहां तक ​​कि रद्द स्पर्श भी नहीं है। मुझे समाधान मिला। यह आसान है। बस UITextField का उप-वर्ग बनाएं और स्पर्श को ओवरराइड करें: और स्पर्श किए गए हैं:।

@interface TextField : UITextField 

@end 

@implementation CuteTextField 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ 
    [super touchesEnded:touches withEvent:event]; 
    self.backgroundColor=GetDefaultBackgroundColor(); 
} 

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{ 
    [super touchesCancelled:touches withEvent:event]; 
    self.backgroundColor=GetDefaultBackgroundColor(); 
} 

@end 
1

आप यूवी व्यू के लिए श्रेणी बना सकते हैं और स्पर्शों को ओवरराइड कर सकते हैं।

यह मेरे लिये ठीक काम कर रहा है यह इस समस्या के लिए समाधान को केंद्रीकृत है।

#import "UIView+Keyboard.h" 
@implementation UIView(Keyboard) 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [self.window endEditing:true]; 
    [super touchesBegan:touches withEvent:event]; 
} 


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