2012-04-12 13 views
5

मेरे पास UIScrollView के अंदर एक टेक्स्टफील्ड है और जब मैं संपादन शुरू करता हूं तो मैं एक साफ़ बटन दिखाना चाहता हूं। यूजर स्क्रॉल की पृष्ठभूमि को टैप करते समय भी मुझे कीबोर्ड को छिपाने की ज़रूरत है (लेकिन टेक्स्टफील्ड नहीं)। स्पष्ट बटन प्रदर्शित करना कोई समस्या नहीं है, समस्या यह है कि जब स्पष्ट बटन टैप किया जाता है तो कुंजीपटल छुपा जाता है और टेक्स्ट फ़ील्ड साफ़ नहीं होता है। स्पष्ट रूप से समस्या इशारा पहचानकर्ता के साथ है, क्योंकि स्पष्ट बटन क्लिक होने पर इस से निपटने वाली विधि को निकाल दिया जाता है (लेकिन पाठ फ़ील्ड टैप होने पर इसे निकाल दिया नहीं जाता है)। यहां मेरा कोड है:यूआईटीक्स्टफील्ड का स्पष्ट बटन कुंजीपटल छुपाता है जब उसके अंदर UIScrollView

//adding gesture recognizer so i can hide keyboard when user taps scrollview 
    - (void) textFieldDidBeginEditing:(UITextField *)textField 
    { 
     if (self.tapOutside == nil) self.tapOutside = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(textFieldTouchOutSide:)]; 

     [self.scrollView addGestureRecognizer:self.tapOutside]; 
    } 

    //This hides keyboard BUT IS ALSO CALLED WHEN CLEAR BUTTON IS TAPPED 
    - (void)textFieldTouchOutSide:(id)sender 
    { 
     [self.textfield resignFirstResponder]; 
    } 

    //NEVER GETS CALLED 
    - (BOOL) textFieldShouldClear:(UITextField *)textField { 
     return YES; 
    } 

कोई विचार यह कैसे हल करें? इशारा पहचानकर्ता जोड़ने के लिए शायद बेहतर तरीका? मेरे पास कोई सुरुचिपूर्ण समाधान के लिये पहले ही एक बहुत सोच भी नहीं सकते ... धन्यवाद ...

उत्तर

13

मैं एक ही समस्या थी और निम्न विधि को लागू इसे हल:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    // Disallow recognition of gestures in unwanted elements 
    if ([touch.view isMemberOfClass:[UIButton class]]) { // The "clear text" icon is a UIButton 
     return NO; 
    } 
    return YES; 
} 

मत भूलना अनुरूप "UIGestureRecognizerDelegate" प्रोटोकॉल के लिए और प्रतिनिधि सेट (अपने वार्स का उपयोग कर):

self.tapOutside.delegate = self; 

चीयर्स

+0

अगले सप्ताह तक इसका परीक्षण नहीं कर सकता है, लेकिन यह एक समाधान प्रतीत होता है ... बहुत बहुत धन्यवाद! :) –

+0

क्या आपने इसका परीक्षण किया? काम किया? यदि ऐसा है, तो कृपया इस उत्तर को स्वीकार करें। – Thompsonian

+0

मेरे पास पृष्ठ पर एक कस्टम UIButton सबक्लास भी था इसलिए मैंने इसे बनाया है KindOfClass: [UIButton class] –

2

मैं सिर्फ इस मुद्दे और इस समाधान हो रही थी काम किया लेकिन यदि यो,

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
// Disallow recognition of gestures in unwanted elements 
if ([touch.view isMemberOfClass:[UIButton class]] && [touch.view.superview isMemberOfClass:[UITextField class]]) { 

    // The "clear text" icon is a UIButton 
    return NO; 
} 
return YES; 
} 

इस मामले के लिए एक ही नहीं लौटने को कम होगा, अगर बटन के एक subview है: यू विचार है कि आप जबकि फ़ॉर्म को भर कर आप निम्न कर सकते उपयोगकर्ता का दोहन करने के लिए अनुमति देते हैं पर अन्य बटन है एक UITextField, जैसा कि स्पष्ट बटन वाला मामला है, लेकिन फिर भी कीबोर्ड को छुपाएं यदि वे सामान्य बटन को स्पर्श करते हैं जो आम तौर पर आपके इशारा कोड को निष्पादित करेगा।