Domanda

Ho 10 campi di testo, ognuno dei quali potrebbe contenere al massimo un personaggio. Quando inserisco un personaggio nel primo campo di testo, l'attenzione dovrebbe passare automaticamente al campo di testo successivo e così via. Cioè, non appena il primo personaggio viene inserito in un campo di testo, l'attenzione dovrebbe passare al successivo. Cioè, il prossimo campo di testo dovrebbe diventare il primo risponditore. Ho scritto il codice seguente, ho usato il metodo del delegato di Textfield.

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

NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"];

for (int i = 0; i < [string length]; i++) {
    unichar c = [string characterAtIndex:i];
    if([myCharSet characterIsMember:c])
    {
        int previousTag = textField.tag;


        if([textField.text length] > 0)
        {
            if((previousTag == 9) && ([textField10.text length] >0))
            {
                return NO;
            }
            UITextField *tempField=(UITextField *)[self.view viewWithTag:previousTag+1]; 
            if([tempField.text length] > 0){
                [tempField resignFirstResponder];
                return NO;
            }
            [tempField becomeFirstResponder];
            return YES;
        }

    }
    else{
        return NO;
    }
}


return YES;
}

Ma non sto ottenendo i risultati desiderati. Quando digio un personaggio è inserito nel primo campo di testo, ma il focus non si sta spostando verso il successivo, anche se quando digio il 2 ° carattere, viene inserito nel prossimo campo di testo.

Allo stesso modo, devo scrivere una funzione di eliminazione in modo tale che quando elimino un campo di testo, l'attenzione si sposta automaticamente sul campo di testo precedente.

Qualsiasi risposta sarà apprezzata. Grazie.

È stato utile?

Soluzione

Puoi sempre restituire no e cambiare manualmente il testo di Textfield. Immagino di ciò di cui hai bisogno sia qualcosa del genere.

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

NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"];
int previousTag = textField.tag;

if ([string isEqualToString:@""]) {//backspace button
    if (previousTag==0) {//added to prevent crashing in first tf
        return YES;
    }
  UITextField *tempField2=(UITextField *)[self.view viewWithTag:previousTag-1]; 

    textField.text=string;
    [tempField2 becomeFirstResponder];
    return NO;

}
for (int i = 0; i < [string length]; i++) {
    unichar c = [string characterAtIndex:i];
    if([myCharSet characterIsMember:c])
    {
        if((previousTag == 9) && ([textField10.text length] >0))
        {
            return NO;
        }

        UITextField *tempField=(UITextField *)[self.view viewWithTag:previousTag+1]; 
        if([tempField.text length] > 0)
        { 
            textField.text=string;
            [tempField resignFirstResponder];
            return NO;
        }
        textField.text=string;
        [tempField becomeFirstResponder];
        return NO;

    }
    else{
        return NO;
    }


}


return YES;
}

Altri suggerimenti

-ShouldChangeCharactersInnange viene chiamato prima che il campo di testo cambi effettivamente il suo testo. Quindi otterrai il vecchio valore nella stringa. Aggiungi la linea all'inizio del metodo. Dovrebbe risolvere il tuo problema.

string = [textField.text stringByReplacingCharactersInRange:range withString:string];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top