Actuellement, j'essaie de définir les boutons suivants/précédents de la barre d'outils de mon clavier sur le nouveau bouton élégant/précédent d'iOS 7, qui est placé dans les contrôleurs de navigation pour revenir en arrière. Voici ce que j'essaye. Comment utiliser le bouton de la barre système au lieu du texte statique ennuyeux?
[self setToolbar:[[UIToolbar alloc] initWithFrame:self.frame]];
[self.toolbar setBarStyle:UIBarStyleDefault];
[self.toolbar setAutoresizingMask:(UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth)];
[self addSubview:self.toolbar];
[self setSegmentedControl:[[UISegmentedControl alloc] initWithItems:@[ NSLocalizedStringFromTable(@"Previous", @"BSKeyboardControls", @"Previous button title."),
NSLocalizedStringFromTable(@"Next", @"BSKeyboardControls", @"Next button title.") ]]];
Voici à quoi cela ressemble maintenant:
Voici ce que je veux qu'il ressemble à:
Des idées sur la façon d'accéder à ces éléments du système sans utiliser réellement d'images? Je sais que c'est l'exact bouton de la barre de retour iOS 7, je ne sais tout simplement pas comment y accéder dans une barre d'outils. J'ai cherché partout. Si cela peut aider, j'utilise BSKeyboardControls.
EDIT: Pour que le résultat corresponde exactement à la deuxième image, utilisez les images fournies par Joshua et enregistrez-les sous le nom [email protected] et [email protected] dans votre projet xcode. Utilisez le code de Chun, mais assurez-vous d’appeler la méthode pour obtenir les images de la manière suivante: imageNamed: @ "back", et non @ "back @ 2x". Vous avez maintenant iOS 7 boutons précédent et suivant :)
EDIT2: pour qu’il ressemble exactement aux boutons fléchés précédent/suivant, utilisez les personnalisations suivantes dans les méthodes d’implémentation appropriées:
[self.segmentedControl setWidth:50 forSegmentAtIndex:0];
[self.segmentedControl setWidth:38 forSegmentAtIndex:1];
negativeSeparator.width = -19;
EDIT3: la barre d’outils avec les flèches <> est fournie par défaut avec tous les UIWebViews et elle apparaît lorsque vous tapez sur un champ de texte.
Si quelqu'un est intéressé par un exemple de projet, faites-le moi savoir et je téléchargerai un lien!
EDIT4: Depuis le 24 mai 2014, BSKeyboardControls dispose désormais de cette fonctionnalité par défaut.
1) Téléchargez les derniers fichiers depuis: https://github.com/simonbs/BSKeyboardControls
2) Importez les images pour les boutons Précédent/Suivant. Celles-ci peuvent être ce que vous voulez et vous pouvez définir les tailles appropriées pour qu'elles aient fière allure. Joshua a un bon jeu. J'ai le mien enregistré sous "keyboardBack.png" et "keyboardForward.png"
3) Dans BSKeyboardControls.m, mettez à jour initWithFields: fields. Ici, vous pouvez personnaliser certaines options, par exemple définir la largeur de vos boutons Précédent/Suivant. J'ai également supprimé le bouton Terminé ici pour suivre votre capture d'écran, mais vous pouvez le rajouter.
- (id)initWithFields:(NSArray *)fields
{
if (self = [super initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 44.0f)])
{
// Creates toolbar
[self setToolbar:[[UIToolbar alloc] initWithFrame:self.frame]];
[self.toolbar setBarStyle:UIBarStyleDefault];
[self.toolbar setAutoresizingMask:(UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth)];
[self addSubview:self.toolbar];
// Import images
UIImage *backImage = [[UIImage imageNamed:@"keyboardBack"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *forwardImage = [[UIImage imageNamed:@"keyboardForward"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
// Create segmentedcontrol
self.segmentedControl = [[UISegmentedControl alloc] initWithItems:@[backImage, forwardImage]];
self.segmentedControl.tintColor = [UIColor clearColor];
// Set button widths
[self.segmentedControl setWidth:50 forSegmentAtIndex:0];
[self.segmentedControl setWidth:50 forSegmentAtIndex:1];
// Other BSKeyboardControls stuff
[self.segmentedControl addTarget:self action:@selector(segmentedControlValueChanged:) forControlEvents:UIControlEventValueChanged];
[self.segmentedControl setMomentary:YES];
[self.segmentedControl setEnabled:NO forSegmentAtIndex:BSKeyboardControlsDirectionPrevious];
[self.segmentedControl setEnabled:NO forSegmentAtIndex:BSKeyboardControlsDirectionNext];
[self setSegmentedControlItem:[[UIBarButtonItem alloc] initWithCustomView:self.segmentedControl]];
[self setVisibleControls:(BSKeyboardControlPreviousNext)];
[self setFields:fields];
}
return self;
}
4) Le remplissage gauche de la barre d’outils est un peu trop fort, vous pouvez donc le corriger en ajoutant un séparateur négatif dans toolbarItems: dans BSKeyboardControls.m:
- (NSArray *)toolbarItems
{
NSMutableArray *items = [NSMutableArray arrayWithCapacity:3];
if (self.visibleControls & BSKeyboardControlPreviousNext)
{
UIBarButtonItem *negativeSeperator = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
target:nil
action:nil];
negativeSeperator.width = -12;
[items addObject:negativeSeperator];
[items addObject:self.segmentedControlItem];
}
if (self.visibleControls & BSKeyboardControlDone)
{
[items addObject:[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]];
[items addObject:self.doneButton];
}
return items;
}
Remarque: je n'ai probablement pas les largeurs de boutons et les rembourrages aux spécifications exactes, mais vous pouvez les ajuster à votre guise!
Ce sont les images utilisées dans la barre d’outils, par exemple. les images des boutons Précédent et Suivant:
Utilisez les icônes partagées par Joshua, puis essayez avec le morceau de code ci-dessous et vous serez prêt à partir. Je n'ai pas ajouté le bouton Terminé ici.
UIImage *backImage = [[UIImage imageNamed:@"backImage"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *forwardImage = [[UIImage imageNamed:@"forward"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
self.segmentedControl = [[UISegmentedControl alloc] initWithItems:@[backImage, forwardImage]];
[self.segmentedControl addTarget:self action:@selector(segmentedControlChangedState:) forControlEvents:UIControlEventValueChanged];
self.segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
self.segmentedControl.tintColor = [UIColor clearColor];
UIBarButtonItem *aSegmentedControlBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self.segmentedControl];
[self setItems:@[aSegmentedControlBarButtonItem, self.flexibleSpace]];
Si vous ne craignez pas de vivre sur le bord, vous pouvez utiliser les éléments système non documentés d’Apple pour obtenir l’aspect iOS 7. Voici les éléments des boutons de barre gauche et droite.
[self setDoneButton:[[UIBarButtonItem alloc] initWithBarButtonSystemItem:105 target:nil action:nil]];
[self setDoneButton:[[UIBarButtonItem alloc] initWithBarButtonSystemItem:106 target:nil action:nil]];
Vous pouvez utiliser cet excellent tool by @iftekhar et personnaliser IQSegmentedNextPrevious
en fonction de votre besoin de donner des images au lieu du bouton suivant.
En utilisant Xcode 7.3, vous pouvez simplement entrer un symbole sous la forme title pour l’élément de barre. Cela fonctionne à la fois dans le code et dans Interface Builder:
title
dans IB ou entre guillemets dans le code).Les symboles inférieur et supérieur sont colorés en bleu dans la barre d'outils par défaut.
Dans du code:
backButton.title = "<"
En IB:
Utilisez ceci: https://github.com/simonbs/BSKeyboardControls
Mais il utilise le contrôle segmenté qui a été aplati dans iOS 7.
Edit: Modifiez simplement le texte des segments:
[self setSegmentedControl:[[UISegmentedControl alloc] initWithItems:@[@"<",@">") ]]];
Cela peut ne pas être le plus élégant. (Même pas sûr que ce code exact compile, mais vous voyez le point)