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
Un
UISegmentedControl
est certainement plus de bonbons pour les yeux que de deux boutons.OriginalL'auteur BillySangster | 2013-01-03
Vous devez vous connecter pour publier un commentaire.
Ici est un
UIViewController
extension que j'utilise à chaque fois que j'ai besoin d'un groupe deUITextField
s pour permettre la navigation via l'entrée de l'accessoire. Pas besoin d'utiliserUITextField
délégation avec cette approche, et en ajoutant le comportement à de multiples formes devient d'un seul-liner. Prend également en charge le bouton "terminer" pour faire disparaître.exemple:
Ici est raisonnable icône de la flèche.
Mec, tu es un génie! Beaucoup plus simple que les autres exemples que j'ai trouvé en ligne... merci beaucoup! ☺️
la meilleure solution jusqu'à présent
Excellente solution!. Pouvez-vous veuillez donner des comment accéder précédent, suivant et fait les boutons d'action dans d'autres classes (comme délégués)
OriginalL'auteur Ben Packard
Swift:
Dans UITextFieldDelegate
OriginalL'auteur Sahil Kapoor
Bon, après avoir regardé le brillant BSKeyboardControls, j'ai essayé la mise en œuvre de l'activation et de la désactivation de la commande segmentée en
textFieldDidBeginEditing
, au lieu de l'endroit où mon@selector
a été. J'ai également introduit une variable pour la commande segmentée.Il fonctionne maintenant.
Voici la version modifiée de l'extrait de code:
OriginalL'auteur BillySangster
Ma suggestion ici est de "ne pas réinventer la roue".
Avoir
Prev
etNext
bouton sur un clavier pour basculer entre lesUITextView
s est tellement courants que vous pouvez trouver beaucoup de bonnes implémentations prêt à l'emploi.Découvrez BSKeyboardControl, par exemple.
OriginalL'auteur Gabriele Petronella
Vous pouvez également essayer le pod UITextField-Navigation:
pod 'UITextField-Navigation'
Il ajoute deux chargement paresseux propriétés
nextTextField
etpreviousTextField
à tout objet UITextField. Tous vous avez besoin est de préciser lesnextTextField
soit sur l'interface du générateur ou de la programmation, et la barre d'outils est ajoutée au clavier pour vous.Programme:
Sur l'Interface Builder:
Pandey: veuillez consulter le fichier readme github.com/T-Pham/UITextField-Navigation/blob/master/...
Salut, je crois que vous avez mis à jour la bibliothèque, mais pas la page de documentation sur GitHub et l'exemple de projet.
Salut j'ai vérifié la bibliothèque, la documentation semble vieux , par exemple, si j'utilise la fonction : -func navigationFieldDidTapDoneButton(_ navigationField: NavigationField) { navigationField.resignFirstResponder(). il dit qu'il n'en est rien, comme le Domaine de la Navigation. Le courant de la syntaxe, je crois, est - func textFieldNavigationDidTapDoneButton(_ textField: UITextField).
Le vôtre est une impressionnante bibliothèque, veuillez mettre à jour la page GitHub et puis-je vous demander de faire des frais de documentation et de mise à jour de l'exemple du projet de nouveau.
OriginalL'auteur Thanh Pham
Mis à jour pour Swift 3.0
Et puis:
N'oubliez pas de changer thange "ContactViewController" le nom de votre Vue-Contrôleur.
OriginalL'auteur Rivers
Essayez ceci :-
vous n'avez pas besoin d'activer un autre élément comme ils le réinitialiser à chaque fois lorsque le clavier change ....
Où obtenez-vous de l'expéditeur sur
keyboardToolBar:
? SonsetSegmentedControlStyle
aussi a été déprécié. Toute solution?OriginalL'auteur dev_m