UISegmentedControl avec l'Image et le Titre
Je suis à l'aide d'un UISegmentedControl
à l'intérieur d'un UIToolBar
en tant que bouton. Je ne peux pas utiliser une normale UIButtonBarItem
, parce que j'ai besoin de régler le tintColor
et de support de l'iOS 4.3.
Donc je suis en utilisant le code suivant:
UISegmentedControl* searchButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"", nil]];
[searchButton setImage:[UIImage imageNamed:@"search_picto"] forSegmentAtIndex:0];
searchButton.momentary = YES;
searchButton.segmentedControlStyle = UISegmentedControlStyleBar;
searchButton.tintColor = [UIColor colorWithRed:0.27 green:0.60 blue:0.20 alpha:1.00];
[searchButton addTarget:self action:@selector(actionSearch:) forControlEvents:UIControlEventValueChanged];
Cela fonctionne très bien, mais est-il une manière que je peux avoir un Texte /Titre à côté de mon image?
La méthode setTitle: supprime l'image. Il doit y avoir un autre moyen...
Merci pour votre aide.
--
Edit:
J'ai décidé d'ajouter du texte directement sur la UIImageView
comme ceci:
NSString* label = @"My Label";
UIImage* image = [self addText:label toImage:[UIImage imageNamed:@"icon"]];
[_segmentedControl insertSegmentWithImage:image atIndex:0 animated:NO];
[_segmentedControl setWidth:image.size.width + 10]; //add some margin on the right
- (UIImage *)addText:(NSString *)text toImage:(UIImage *)image {
UIFont* font = [UIFont boldSystemFontOfSize: 12];
CGSize expectedSize = [text sizeWithFont:font];
[self retinaAwareUIGraphicsBeginImageContext:CGSizeMake(image.size.width + expectedSize.width + 10, image.size.height)];
[image drawAtPoint: CGPointZero];
[[UIColor whiteColor] set];
[text drawAtPoint: CGPointMake(30, 2) withFont:font];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
- (void)retinaAwareUIGraphicsBeginImageContext:(CGSize) size {
CGFloat scale = -1.0;
if (scale<0.0) {
UIScreen *screen = [UIScreen mainScreen];
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0) {
scale = [screen scale];
}
else {
scale = 0.0;
}
}
if (scale>0.0) {
UIGraphicsBeginImageContextWithOptions(size, NO, scale);
}
else {
UIGraphicsBeginImageContext(size);
}
}
OriginalL'auteur D-32 | 2012-11-19
Vous devez vous connecter pour publier un commentaire.
essayez ceci :
Je ne pense pas que ce soit possible. La documentation indique les éléments suivants: Une segmentation de contrôle peut afficher un titre (un objet NSString) ou une image (UIImage objet). si vous souhaitez définir le titre : [searchButton insertSegmentWithTitle:@"" atIndex:0 animé:N]; [searchButton insertSegmentWithTitle:@"vers le Bas" atIndex:1 animation:N];
OriginalL'auteur Mohammad Rabi
Vous pouvez le faire:
ajouter une catégorie pour UIImage:
dans UIImage+UISegmentIconAndText.h
dans UIImage+UISegmentIconAndText.m
dans votre code en œuvre de Segment:
Fonctionne bien, mais les tailles de police sont éteints. Le texte de taille semble plus petit que la taille de la chaîne augmente
Beau morceau de code! Correspond parfaitement à mes besoins
OriginalL'auteur Luan D
Swift 4
OriginalL'auteur Hituc
Pour Swift.
segFont est la police de caractères pour le texte incorporé.
imageAlignment est l'alignement de l'image qui apparaît à gauche ou à droite du texte.
ensemble imageAlignment à 0 de l'alignement à gauche (image apparaîtra à gauche du texte) et 1 pour un alignement à droite (image apparaîtra à droite du texte)
OriginalL'auteur iOSCodeJunkie
Swift 3
OriginalL'auteur Daniel Rodriguez Mendez