Vraag iOS-app "volgende" -toets gaat niet naar het volgende tekstveld


Ik heb een eenvoudige scène (met storyboard in IB) met een tekstvak Gebruikersnaam en Wachtwoord. Ik heb het klavier ingesteld om te sluiten wanneer je in het tekstveld Wachtwoord bent, maar de volgende (retour) knop niet kunt krijgen om te werken op de gebruikersnaam om de focus (of eerste responder) te schakelen naar het tekstvak Wachtwoord.

Ik sluit het toetsenbord in het tekstveld Wachtwoord op de volgende manier:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
if (theTextField == self.textPassword) {
    [theTextField resignFirstResponder];
}
return YES;
}

Ik weet dat het iets soortgelijks is, maar kan het gewoon niet opschrijven.


40
2018-03-02 21:17


oorsprong


antwoorden:


De return-toets doet standaard niets bijzonders in een tekstveld. U moet de eerste responder expliciet wijzigen:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    if (theTextField == self.textPassword) {
        [theTextField resignFirstResponder];
    } else if (theTextField == self.textUsername) {
        [self.textPassword becomeFirstResponder];
    }
    return YES;
}

88
2018-03-02 21:28



Ik gebruik deze code waarmee ik het formuliergedrag in de storyboard:

-(BOOL) textFieldShouldReturn:(UITextField *)textField{
    if(textField.returnKeyType==UIReturnKeyNext) {
        UIView *next = [[textField superview] viewWithTag:textField.tag+1];
        [next becomeFirstResponder];
    } else if (textField.returnKeyType==UIReturnKeyDone) {
        [textField resignFirstResponder];
    }
    return YES;
} 

Het enige dat u nodig hebt, is om de bestelwaarde als toe te wijzen tag, en returnkey volgens volgende of Gedaan op elke ingangsregeling.


40
2018-06-28 13:50



voor degenen die de Swift-taal willen gebruiken:

class MyClass: UIViewController, UITextFieldDelegate {

@IBOutlet weak var text1: UITextField!
@IBOutlet weak var text2: UITextField!
@IBOutlet weak var text3: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()

    text1.delegate = self
    text2.delegate = self
    text3.delegate = self


}

//....

func textFieldShouldReturn(textField: UITextField) -> Bool{
    if textField == self.text1 {
        self.text2.becomeFirstResponder()
    }else if textField == self.text2{
        self.text3.becomeFirstResponder()
    }else{
        self.text1.becomeFirstResponder()
    }
    return true
 }

 //...

}

:-)


11
2017-08-16 21:07



U moet de UITextFieldDelegate toevoegen aan het header-bestand. Dan moet je instellen

theTextField.delegate = self;

in de viewDidLoad-methode. Daarna kun je doorgaan

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    if (theTextField == self.textPassword) {
        [theTextField resignFirstResponder];
    } else if (theTextField == self.textUsername) {
        [self.textPassword becomeFirstResponder];
    }
    return YES;
}

9
2018-01-08 20:23



Er zijn veel oplossingen voor dit probleem. Zie de reacties op deze vraag: Hoe door tekstvelden te navigeren (knoppen Volgende / Gereed).

Lees meer in de Referentiekaart Uiresponder.


5
2018-03-02 21:33



Dit is wat je zou plaatsen:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    if (theTextField == self.textPassword) {
        [theTextField resignFirstResponder];
    } else if (theTextField == self.usernameField) {
        [self.textPassword becomeFirstResponder];
    }
return YES;
}

3
2018-03-02 21:30



U kunt deze subklasse van UITextfield gebruiken die de UIReturnKey dynamisch wijzigt in overeenstemming met de tekst / stringvoorwaarde, en voer vervolgens uw voortzettingsactie uit in de textFieldShouldReturn: (UITextField *) textField delegate

if (textField.returnKeyType == UIReturnKeyNext)

https://github.com/codeinteractiveapps/OBReturnKeyTextField

0
2017-10-21 01:03



Ik heb een probleem dat het tekstveld voor het wachtwoord de focus krijgt en vervolgens de focus onmiddellijk verliest. Eindelijk vond ik dat we NO beter konden retourneren in functie textFieldShouldReturn :. Als we YES retourneren, krijgt het tekstveld een insertText: call. Dan zal het focus verliezen. Ik weet de reden niet.

Ik heb een nieuwe vraag voor dit probleem gemaakt: UITextField krijgt focus en verliest dan onmiddellijk focus door YES in textFieldShouldReturn te retourneren

Als iemand de reden kent, laat het me dan weten. Bedankt.

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    if (theTextField == self.textPassword) {
        [theTextField resignFirstResponder];
    } else if (theTextField == self.textUsername) {
        [self.textPassword becomeFirstResponder];
    }
    // we'd better return NO here
    return NO;
}

0
2017-11-17 11:33



Hier is een Swift 2.0-versie van Rob Mayoff

func textFieldShouldReturn(textField: UITextField) -> Bool {
    if textField == self.emailTextField {
        self.passwordTextField.becomeFirstResponder()
    }else{
        self.passwordTextField.resignFirstResponder()
    }
    return false
}

0
2018-03-03 03:27



Ik heb geprobeerd Esteve's antwoord te gebruiken, maar het werkt niet. Misschien omdat ik xib-bestanden gebruik. Wat ik heb gedaan is zijn code veranderen om het in mijn code te laten werken.

Het werkt op dezelfde manier. Het enige wat u nodig hebt, is om de bestelwaarde als tag toe te wijzen en de return-toets volgens Next of Done of Send op elk invoerbesturingselement.

- (BOOL)textFieldShouldReturn:(UITextField *)textField{

    [textField resignFirstResponder];

    if(textField.returnKeyType==UIReturnKeyNext) {

        UITextField *next = (UITextField *)[self.view viewWithTag:textField.tag+1];
        [next becomeFirstResponder];

    } else if (textField.returnKeyType==UIReturnKeySend) {

        //Do whatever you want with the last TextField
    }

    return YES;
}

-1
2018-02-03 09:24