2010-10-27 8 views
13

मेरे पास प्रत्येक सेल में टेक्स्टफिल्ड्स के साथ एक टेबल व्यू है और मैं उन टेक्स्टफील्ड को वर्ण टैब (\t) को अनदेखा करना चाहता हूं।UITextField में टैब कैरेक्टर को अनदेखा करें ... (आईपैड ऐप)

जब टैब कुंजी दबाया जाता है, textField:shouldChangeCharactersInRange विधि यह

कहा जाता है नहीं कर रहा है

किसी को भी ऐसा करने के तरीके जानता है? मुझे पता है कि आईपैड कीबोर्ड में कोई टैब कुंजी नहीं है लेकिन ब्लूटूथ और डॉक वाले लोग वास्तव में अजीब व्यवहार करते हैं और ट्रिगर करते हैं।

धन्यवाद

उत्तर

0

आप रेंज आप के साथ shouldChangeCharactersInRange कॉल कर रहे हैं में अन्य पात्रों की जाँच करने की कोशिश की है? यह सुनिश्चित करेगा कि इसे ठीक से नहीं कहा जा रहा है (विशेष रूप से टैब कुंजी के साथ समस्या के साथ)।

shouldChangeCharactersInRange here पर

अधिक

+0

हैलो .. हाँ, मैं कभी कभी विशिष्ट मानों के लिए जाँच करने के लिए प्रतिनिधि का उपयोग कर रहा है, लेकिन जब मैंने टैब कुंजी को दबाया, जिस विधि को इसे – Omer

2

चेक यकीन UITextField के लिए प्रतिनिधि या तो आईबी या कोड में स्थापित किया जाएगा बनाने के लिए। यह सुनिश्चित करने के लिए जांचें कि आपकी .h फ़ाइल में UITextFieldDelegate निर्दिष्ट है

सभी को अभी काम करना चाहिए।

+0

नहीं कहा जाता है हैलो ... प्रतिनिधि अन्य पात्रों के साथ काम करते हैं, मैं कुछ अन्य चेक करने के लिए उन लोगों का उपयोग कर रहा हूं – Omer

3

यह टैब (\t) वर्ण के साथ एक समस्या प्रतीत होता है। यह चरित्र सामान्य पात्रों की तरह से संभाला नहीं है (उदाहरण के लिए, ख, ग, 0, 1, 2, ...) और इस तरह

   - (BOOL)textField:(UITextField *)textField 
    shouldChangeCharactersInRange:(NSRange)range 
       replacementString:(NSString *)string; 

प्रतिनिधि विधि कभी कहा जा नहीं होंगे।

उदाहरण पर एक टैब का उपयोग करने का नतीजा सिम्युलेटर में एक बाहरी कीबोर्ड या एक वर्तमान में सक्रिय फ़ील्ड इस्तीफा कि यह पहली बार प्रत्युत्तर स्थिति और

[textField nextResponder] 

का परिणाम बजाय पहले प्रत्युत्तर बन जाएगा है।

क्या IMO वर्तमान में एक बग (आईओएस एसडीके 4.3) है कि प्रतिनिधि विधि

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField 

केवल एक बार कहा जाता है (जब आप हाँ वापसी) और जब आप एक ही पाठ फ़ील्ड फिर से चुनें और टैब कुंजी फिर से उपयोग , विधि फिर से नहीं कहा जाएगा।

+0

'- [यूआईआरएसस्पॉन्डर अगली रेस्पॉन्डर]' पर्यवेक्षण देता है, अगले वैध कुंजी दृश्य नहीं , और '-textFieldShouldEndEditing: 'केवल टेक्स्ट फ़ील्ड की सामग्री को सत्यापित करने के लिए है; यह वैसे भी पहले उत्तरदाता को इस्तीफा दे सकता है, और एक स्पर्श प्रेस बनाम एक कुंजी प्रेस के कारण बुलाया जाना मुश्किल होगा। – lemnar

2

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

अपने AppDelegate.m

- (NSArray *)keyCommands { 
static NSArray *commands; 

static dispatch_once_t once; 
dispatch_once(&once, ^{ 
    UIKeyCommand *const forward = [UIKeyCommand keyCommandWithInput:@"\t" modifierFlags:0 action:@selector(ignore)]; 
    UIKeyCommand *const backward = [UIKeyCommand keyCommandWithInput:@"\t" modifierFlags:UIKeyModifierShift action:@selector(ignore)]; 

    commands = @[forward, backward]; 
}); 

return commands; 
} 

में इस जोड़े ViewController में इस विधि जोड़ें:

1

इस पद्धति को लागू करें।मीटर या UITextField के उपवर्ग है जिसमें आप टैब महत्वपूर्ण घटना हैंडल करना चाहते

- (void)ignore { 

    NSLog(@"Your Action"); 
} 

में वर्णित: How do you set the tab order in iOS?

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