2009-12-08 12 views
5

मैं एक एप्लीकेशन विकसित कर रहा हूं जहां मैं कुछ UITextField प्रोग्रामेटिक रूप से बना रहा हूं, और मैं UITextField में अधिकतम 1 वर्ण की अनुमति देता हूं।कर्सर को प्रोग्रामिंग के बाद अगले UITextField में कैसे स्थानांतरित करें?

यह पूरी तरह से काम कर रहा है।

लेकिन चरित्र लेखन के बाद, उपयोगकर्ता फिर से अगले UITextField में दोहन करने के लिए कुंजीपटल

पेश करने के लिए 1 चरित्र कर्सर स्वचालित रूप से अगले UITextField पर जाना चाहिए टाइप करने के बाद है।

मैं यह कैसे कर सकता हूं?

उत्तर

16

प्रतिनिधि को पकड़ें जो आपको सूचित करता है कि आपका टेक्स्टफील्ड बदल दिया गया है। जांचें कि क्या नई लंबाई 1 है। यदि ऐसा है, तो अगले क्षेत्र पर becomeFirstResponder पर कॉल करें।

+0

यह कैसे किया जाता है? क्या आप कृपया कुछ नमूना कोड दिखा सकते हैं? – quantum

+0

'[टेक्स्टफिल्ड बन गया फर्स्ट रेस्पॉन्डर]' – akashivskyy

4

मैं इस दृष्टिकोण पाया है ..

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

    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; 

    if(textField == textField1) 
    { 
     if (textField1.text.length > 0 && range.length == 0) 
     { 
      return NO; 
     } 
     else { 
      [textField1 setText:newString]; 
      [textField2 becomeFirstResponder]; 
      return YES; 
     } 
    } 
    else if(textField == textField2) 
    { 
     if (textField2.text.length > 0 && range.length == 0) 
     { 
      return NO; 
     }else { 
      [textField2 setText:newString]; 
      [textField3 becomeFirstResponder]; 
      return YES; 
     } 
    } 
} 

हम किसी अन्य तरीके से यह कर सकते हैं ... viewDidLoad और उस विधि में इस लाइन घोषित।

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(endEditingTextField:) name:@"UITextFieldTextDidChangeNotification" object:txtfield1]; 

- (void) endEditingTextField:(NSNotification *)note { 
    if ([[txtfield1 text] length] > 0) 
    { 
     [txtfield1 resignFirstResponder]; 
     [txtfield2 becomeFirstResponder]; 
    } 
} 

आशा इस मदद करता है ...

+0

यह काम नहीं करता है? –

+0

यह मेरे लिए काम किया। किसी भी तरह से मैंने ऐसा करने के लिए एक और तरीका जोड़ा। –

0

आप के लिए है बस का उपयोग

[textField'sName becomeFirstResponder]; 
1

यह 3 सरल चरणों में किया जा सकता:

  1. वर्तमान पाठ क्षेत्र में होना चाहिए कर्सर के लिए इस्तीफा दे दिया।
  2. निम्न टेक्स्ट फ़ील्ड की गणना करें
  3. निम्न टेक्स्ट फ़ील्ड कर्सर प्राप्त करें।

कोड में:

if ([currentTextFieldWithCursor canResignFirstResponder]) [currentTextFieldWithCursor resignFirstResponder]; 
UITextField *followingTextField = // just get it! 
if ([followingTextField canBecomeFirstResponder]) [followingTextField becomeFirstResponder]; 

आशा है कि यह मदद करता है।

2

उपरोक्त समाधान काम नहीं किया। यह समाधान मेरे लिए काम करता है:

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

    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; 

    if(firstCodeField == textField){ 
     [firstCodeField setText:newString]; 
     [secondCodeField becomeFirstResponder]; 
    } 
    if(secondCodeField == textField){ 
     [secondCodeField setText:newString]; 
     [thirdCodeField becomeFirstResponder]; 
    } 

    NSUInteger newLength = [textField.text length] + [string length] - range.length; 
    return (newLength > 1) ? NO : YES; 
} 
1

सिर्फ

सेट UITextFieldDelegate

और अपने .m फ़ाइल में इस पद्धति का अतीत। यह ओटीपी पाठ बॉक्स के लिए काम करेगा।

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

    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; 

    if(_txt1 == textField){ 
     if ([_txt1.text length] == 0) { 
      [_txt1 setText:newString]; 
       [_txt2 becomeFirstResponder ]; 
     } 

    } 
    if(_txt2 == textField){ 

     if ([_txt2.text length] == 0) { 
       [_txt2 setText:newString]; 
       [_txt3 becomeFirstResponder]; 
     } 

    } 

    if(_txt3 == textField){ 

     if ([_txt3.text length] == 0) { 
       [_txt3 setText:newString]; 
       [_txt4 becomeFirstResponder]; 
     } 

    } 

    if(_txt4 == textField){ 

     if ([_txt4.text length] == 0) { 
      [_txt4 setText:newString]; 
     } 

    } 

    NSUInteger newLength = [textField.text length] + [string length] - range.length; 
    return (newLength > 1 && newLength == 2) ? NO : YES; 
} 

किसी के लिए यह काम आशा है। :)

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