2010-10-12 12 views
9

La fuente es muy pequeña y difícil de leer para algunos, por lo que me gustaría que esté más cerca del tamaño de fuente utilizado en los botones debajo de ella.¿Hay alguna manera de cambiar el tamaño de la fuente del título en una hoja UIActionSheet?

+0

Probablemente no haya una forma admitida de hacerlo. Probablemente pueda obtener una referencia a la vista de la hoja de acción de alguna manera, luego recorrerla para encontrar el título UILabel y editar esa vista directamente, pero eso podría romperse en el futuro si la implementación del sistema operativo de la hoja de acción cambia. – Nimrod

Respuesta

2

Como Nimrod dijo que no puedes hacer esto con un método nativo. Puede consultar las subvistas de UIActionSheet, encontrar la buena y cambiar sus propiedades.

PERO

  • Esta aplicación puede bloquearse en una futur actualización iOS
  • Apple podría rechazar su aplicación
  • UIActionSheet es un elemento natural de iPhone GUI y los usuarios están familiarizados con ella

SO

realmente se debe no cambia el tamaño de fuente utilizado .. Si este título UIActionSheet es importante que debe encontrar otra manera de mostrar al usuario ...

16

Puede cambiar la propiedad de fuente después de show method (como showFromBarButtonItem) como se muestra a continuación.

CGRect oldFrame = [(UILabel*)[[sheet subviews] objectAtIndex:0] frame]; 
UILabel *newTitle = [[[UILabel alloc] initWithFrame:oldFrame] autorelease]; 
newTitle.font = [UIFont boldSystemFontOfSize:17]; 
newTitle.textAlignment = UITextAlignmentCenter; 
newTitle.backgroundColor = [UIColor clearColor]; 
newTitle.textColor = [UIColor whiteColor]; 
newTitle.text = @"My Title"; 
[sheet addSubview:newTitle]; 

[sheet release]; 
+0

Excelente solución. Y la razón de hacerlo DESPUÉS del método 'show' es que no tenemos la hoja de marco de acción y sus subvistas antes de' show' – Philip007

+0

Este método ya no funciona a partir de iOS 7 – Keab42

+0

¡¡¡Gran respuesta con una buena explicación !! – sac

0

Bueno, hay una manera de hacerlo - he creado una subclase UIActionSheet en github llamado LTActionSheet

Como han mencionado otros, todo tipo de cosas terribles pueden suceder si lo usa (no lo he hecho en código de envío ... aún :-)) Si lo usa en una aplicación que es aceptada, ¡avísenos!

2

@ respuesta de user651909 funciona muy bien para mí, aunque sólo para añadir algunos detalles más:

tuve que initWithTitle:@" " (nótese la cadena no vacía) al crear el UIActionSheet para que la vista tenía un poco de espacio en la parte superior para cualquier texto para comenzar. Luego, después de hacer un [popupQuery showInView:self.view];, agregué su sugerencia para que se inicializara el marco anterior. Por último, añadí:

[newTitle sizeToFit]; 
newTitle.frame = CGRectMake(oldFrame.origin.x, 
          oldFrame.origin.y, 
          oldFrame.size.width, 
          newTitle.frame.size.height); 

Esto era necesario ya que la altura de la oldFrame 's era demasiado pequeño para mi fuente más grande (tamaño 20), haciendo que algunas letras para obtener recortados en la parte inferior. Además, incluso con este ajuste, si hace que el texto sea demasiado grande, digamos mayor que boldSystemFontOfSize: 26, el texto se ejecutará demasiado cerca o dentro de los botones a continuación. Cambiar el tamaño del marco de la hoja no ayuda, ya que los botones parecen estar anclados en la parte superior.

Presumiblemente haciendo

CGRect oldFrame = [(UILabel*)[[sheet subviews] objectAtIndex:0] frame]; 

no viola la política de no usar cualquier API interna de Apple, ¿verdad?

0
UIActionSheet *as = [[UIActionSheet alloc] initWithTitle:@"SpecifySearch" 
       delegate:self 
     cancelButtonTitle:@"Cancel" 
    destructiveButtonTitle:nil 
     otherButtonTitles:@"UncategorizedContacts" , nil]; 

//as.actionSheetStyle = UIActionSheetStyleBlackTranslucent; 
[as showFromTabBar:self.tabBarController.tabBar]; 

if(as.subviews.count > 0 
    && [[as.subviews objectAtIndex:0] isKindOfClass:[UILabel class]]){ 
    UILabel* l = (UILabel*) [as.subviews objectAtIndex:0]; 
    [l setFont:[UIFont boldSystemFontOfSize:20]]; 
} 

[as release]; 
0

Al igual que conecon ha demostrado que puede obtener un puntero y manipularlo. Si he entendido bien lo que está tratando de hacer es:

[sheet showInView:[self.view window]]; 
UILabel *title = [[sheet subviews] objectAtIndex:0]; 
title.font = [UIFont boldSystemFontOfSize:20]; 
title.textAlignment = UITextAlignmentCenter; 

Espero que esto ayude!

1
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"Share" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Facebook", @"Twitter",nil]; 
[sheet showInView:self.view]; 
if (![[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { 
    CGRect labelFrame = [(UILabel*)[[sheet subviews] objectAtIndex:0] frame]; 
    [[[sheet subviews] objectAtIndex:0] removeFromSuperview]; 
    UILabel *newTitle = [[UILabel alloc] initWithFrame:labelFrame]; 
    newTitle.font = [UIFont boldSystemFontOfSize:17]; 
    newTitle.textAlignment = UITextAlignmentCenter; 
    newTitle.backgroundColor = [UIColor clearColor]; 
    newTitle.textColor = [UIColor whiteColor]; 
    newTitle.text = @"Share"; 
    [sheet addSubview:newTitle]; 
} 
2

Desde el UIActionSheet Class Reference:

UIActionSheet no está diseñado para ser una subclase, ni debe añadir vistas a su jerarquía. Si necesita presentar una hoja con más personalización que la proporcionada por la API UIActionSheet, puede crear la suya propia y presentarla de manera modal con presentViewController:animated:completion:.

Cuestiones relacionadas