2011-05-23 11 views
5

Parola için 8 adet kullanıyorum. Her metin alanında şifre bir harf içerir. Bir harf yazdığımda ve ikinci tuşa bastığımda bundan sonra odak bir sonraki metin alanına gider. Ama bunu istiyorum, ilk karakteri yazmayı bitirdiğimde, odak diğer tuşa basmadan veya sekme tuşuna basmadan bir sonraki metin alanına geçmelidir. Bunu nasıl yapabilirim? Bunun için örnek kod eğitimi var mı? Kullandığım kod aşağıdaki gibidir. Bu yardımcı oluriPhone'da sonraki uitextfield'e odaklanma nasıl ayarlanır?

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(keyPressed:) name: UITextFieldTextDidChangeNotification object: nil]; 
    // Try to find next responder 

    UIResponder* nextResponder = [textField.superview viewWithTag:nextTag]; 
    if (nextResponder) { 
     // Found next responder, so set it. 
     //nextTag += 1; 
     [nextResponder becomeFirstResponder]; 
     if ([nextResponder tag] == 308) { 
      //[self performSelector:@selector(checkPassCode) withObject:nil afterDelay:0.0]; 
      [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(checkPassCode) userInfo:nil repeats:NO]; 
      lastResponder = nextResponder; 
     } 
     return YES; 
    } else { 
     [textField resignFirstResponder]; 
     return NO; 
    } 
} 


-(void) keyPressed: (NSNotification*) notification 
{ 
    nextTag += 1; 
    [[NSNotificationCenter defaultCenter] removeObserver: self name:UITextFieldTextDidChangeNotification object: nil]; 
} 

cevap

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

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

    if ([finalString length] > 0) { 
     textField.text = string; 

     UIResponder* nextResponder = [textField.superview viewWithTag:(textField.tag + 1)]; 
     if (nextResponder) { 
      [nextResponder becomeFirstResponder]; 

      // Your code for checking it. 
     } 

     return NO; 
    } 

    return YES; 
} 

Umut.

Swift 3,2

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
    let finalString: String? = (textField.text? as NSString).replacingCharacters(in: range, with: string) 
    if (finalString?.characters.count ?? 0) > 0 { 
     textField.text = string 
     let nextResponder: UIResponder? = textField.superview?.viewWithTag((textField.tag + 1)) 
     if nextResponder != nil { 
      nextResponder?.becomeFirstResponder() 
      // Your code for checking it. 
     } 
     return false 
    } 
    return true 
} 

Swift 4,1

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
    let finalString: String? = (textField.text as NSString?)?.replacingCharacters(in: range, with: string) 
    if finalString?.count > 0 { 
     textField.text = string 
     let nextResponder: UIResponder? = textField.superview?.viewWithTag(textField.tag + 1) 
     if nextResponder != nil { 
      nextResponder?.becomeFirstResponder() 
      // Your code for checking it. 
     } 
     return false 
    } 
    return true 
} 
5

bu eklenti bildirimi deneyin viewDidLoad,

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

- (void)limitTextField:(NSNotification *)note { 
    if(txtField1.tag==1) 
    { 
     if ([[txtField1 text] length] > 1) 
     { 
      [txtField1 resignFirstResponder]; 
      [txtField2 becomeFirstResponder]; 
     } 
    } 
} 
6
-(BOOL)textFieldShouldReturn:(UITextField *)textField { 

    if (textField ==firstTextField) { 
     [secondTextField becomeFirstResponder]; 
    }else if (textField == secondTextField){ 
     [thirdTextField becomeFirstResponder]; 
    }else if (textField == thirdTextField){ 
     [fourthTextField becomeFirstResponder]; 
    }else{ 
     [textField resignFirstResponder]; 
    } 
     return YES; 
} 
İlgili konular