Barre d'outils avec “Précédent” et “Suivant” pour le Clavier inputAccessoryView

J'ai essayé de mettre en œuvre cette barre d'outils, où seul le bouton "Suivant" est activé lorsque le haut textField est le firstResponder et seul le "Précédent" bouton est activé lorsque le fond textField est le firstResponder.

Ce type de travaux, mais ce qui continue à se produire est que j'ai besoin d'exploiter le "Précédent" /"Suivant" boutons deux fois à chaque fois pour activer/désactiver l'opposition bouton.

Ai-je raté quelque chose dans le répondeur de la chaîne qui fait que cela se produise?

Voici mon code:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.topText becomeFirstResponder];
}


- (UIToolbar *)keyboardToolBar {

    UIToolbar *toolbar = [[UIToolbar alloc] init];
    [toolbar setBarStyle:UIBarStyleBlackTranslucent];
    [toolbar sizeToFit];

    UISegmentedControl *segControl = [[UISegmentedControl alloc] initWithItems:@[@"Previous", @"Next"]];
    [segControl setSegmentedControlStyle:UISegmentedControlStyleBar];
    segControl.momentary = YES;
    segControl.highlighted = YES;

    [segControl addTarget:self action:@selector(changeRow:) forControlEvents:(UIControlEventValueChanged)];
    [segControl setEnabled:NO forSegmentAtIndex:0];

    UIBarButtonItem *nextButton = [[UIBarButtonItem alloc] initWithCustomView:segControl];

    NSArray *itemsArray = @[nextButton];

    [toolbar setItems:itemsArray];

    return toolbar;
}

- (void)changeRow:(id)sender {

    int idx = [sender selectedSegmentIndex];

    if (idx == 1) {
        [sender setEnabled:NO forSegmentAtIndex:1];
        [sender setEnabled:YES forSegmentAtIndex:0];
        self.topText.text = @"Top one";
        [self.bottomText becomeFirstResponder];
    }
    else {
        [sender setEnabled:NO forSegmentAtIndex:0];
        [sender setEnabled:YES forSegmentAtIndex:1];
        self.bottomText.text =@"Bottom one";
        [self.topText becomeFirstResponder];
    }
}


-(void)textFieldDidBeginEditing:(UITextField *)textField {
    if (!textField.inputAccessoryView) {
        textField.inputAccessoryView = [self keyboardToolBar];
    }
}
Pourquoi êtes-vous à l'aide d'une commande segmentée au lieu de deux boutons?
Un UISegmentedControl est certainement plus de bonbons pour les yeux que de deux boutons.

OriginalL'auteur BillySangster | 2013-01-03