2010-12-18 16 views
5

Recientemente he estado haciendo preguntas relacionadas con UIToolbars y lo que no, pero ahora descubro que necesito agregarle elementos programáticamente, he visto los métodos de otras personas sobre cómo hacerlo. pero cuando trato de hacer lo mismo, nada termina apareciendo. Identificar este problema es en lo que necesito ayuda. Aquí están mis conexiones en IB:Agregar elementos a UIToolbar Programaticamente no funciona

alt text

Y aquí está el código correspondiente:

Archivo de cabecera: archivo

#import <UIKit/UIKit.h> 

@interface ParkingRootViewController : UIViewController { 
    UINavigationController *navigationController; 
    UIToolbar *toolbar; 
    UIBarButtonItem *lastUpdateLabel; 
} 

@property(nonatomic, retain) IBOutlet UINavigationController *navigationController; 
@property (nonatomic, retain) IBOutlet UIToolbar *toolbar; 
@property (nonatomic, retain) IBOutlet UIBarButtonItem *lastUpdateLabel; 

- (IBAction)selectHome:(id)sender; 

@end 

Implementación:

- (void)viewDidLoad { 
     [super viewDidLoad]; 

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 150.0f, 20.0f)]; 
    label.text = @"last updated..."; 
    label.textColor = [UIColor colorWithWhite:1.0 alpha:1.0]; 
    label.backgroundColor = [UIColor clearColor]; 
    label.textAlignment = UITextAlignmentCenter; 
    label.font = [UIFont boldSystemFontOfSize:13.0]; 
    label.userInteractionEnabled = NO; 

    lastUpdateLabel = [[UIBarButtonItem alloc] initWithCustomView:label]; 
    [label release]; 
    [toolbar setItems:[NSArray arrayWithObject:lastUpdateLabel]]; 


    [self.view addSubview:self.navigationController.view]; 
    //[self.view addSubview:toolbar]; 
    //[self.navigationController.view addSubview:toolbar]; 

    [self.navigationController.view setFrame:self.view.frame]; 

} 

Cualquier ayuda es ¡apreciado enormemente!

EDIT:

He quitado todo lo que tenía en la punta lo que causaría que aparezca la barra de herramientas/ser modificado y actualizado mi código en viewDidLoad a lo siguiente:

self.navigationController.toolbarHidden = NO; 

    //creating label in tool bar 
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 150.0f, 20.0f)]; 
    label.text = @"last updated..."; 
    label.textColor = [UIColor colorWithWhite:1.0 alpha:1.0]; 
    label.backgroundColor = [UIColor clearColor]; 
    label.textAlignment = UITextAlignmentCenter; 
    //label.highlightedTextColor = [UIColor colorWithWhite:0.5 alpha:1.0]; 
    //label.highlighted = YES; 
    label.font = [UIFont systemFontOfSize:13.0]; 
    label.userInteractionEnabled = NO; 

    UIBarButtonItem *lastUpdateLabel = [[UIBarButtonItem alloc] initWithCustomView:label]; 
    //[lastUpdateLabel initWithCustomView:label]; 
    //[label release]; 
    //[toolbar setItems:[NSArray arrayWithObject:lastUpdateLabel]]; 
    [self setToolbarItems:[NSArray arrayWithObject:lastUpdateLabel]]; 

y termino obteniendo una barra de herramientas en blanco apareciendo. Arranco el depurador y esto es lo que veo: enter image description here Aha! El campo _text de la vista lastUpdateLabel está fuera del alcance. ¿Pero por qué? ¿Y cómo remediaría esto? ¡Gracias por adelantado!

EDIT 2:

he sido capaz de añadir etiquetas y un NSActivityIndicator con el siguiente código:

@synthesize refreshDataButton; 
//... 
self.navigationController.toolbarHidden = NO; 

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20.0f, 0.0f, 80.0f, 40.0f)]; 
    label.text = @"last updated..."; 
    label.textColor = [UIColor colorWithWhite:1.0 alpha:1.0]; 
    label.backgroundColor = [UIColor clearColor]; 
    label.textAlignment = UITextAlignmentCenter; 
    label.font = [UIFont systemFontOfSize:13.0]; 
    label.userInteractionEnabled = NO; 
    [self.toolbar addSubview:label]; 

// create activity indicator 
    //      dist frm lft, dist frm top 
    CGRect frame = CGRectMake( 90.0,   11.0,  25.0, 25.0);  
    UIActivityIndicatorView *loading = [[UIActivityIndicatorView alloc] initWithFrame:frame]; 
    loading.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite; 
    [loading sizeToFit];  
    loading.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | 
           UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | 
           UIViewAutoresizingFlexibleBottomMargin);  
    [loading startAnimating]; 

    [self.toolbar addSubview:loading]; 

Pero cuando intento añadir un UIBarButtonItem no tengo suerte (no se muestra en la barra de herramientas):

self.refreshDataButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:100 target:self action:@selector(refreshDataButtonTapped)]; 
[self setToolbarItems:[NSArray arrayWithObject:refreshDataButton]]; 

Aquí está el archivo de cabecera:

#import <UIKit/UIKit.h> 
//#import <CoreData/CoreData.h> 

@interface ParkingRootViewController : UIViewController { 
    UINavigationController *navigationController; 
    UIToolbar *toolbar; 
    UIBarButtonItem *refreshDataButton; 
    //UIActivityIndicatorView *loading; 
} 

@property (nonatomic, retain) IBOutlet UINavigationController *navigationController; 
@property (nonatomic, retain) IBOutlet UIToolbar *toolbar; 
@property (nonatomic, retain) UIBarButtonItem *refreshDataButton; 
//@property (nonatomic, retain) IBOutlet UIActivityIndicatorView *loading; 


@property (nonatomic, readonly) NSString *applicationDocumentsDirectory; 

-(IBAction)selectHome:(id)sender; 
-(void)testCoreData; 
-(void)refreshDataButtonTapped; 

@end 

¿Alguna idea? ¡Gracias!

Respuesta

0

El código publicado funciona bien, creo que tiene que ser cómo se conecta el XIB. Volvería a hacer tus conexiones en IB (es decir, romperé todas las conexiones y las volveré a hacer), guardaré tu XIB e intentaré de nuevo.

+0

hizo lo que usted sugiere, sin suerte. Acabo de ver una simple barra de herramientas gris. Lanzando en esta línea de código: toolbar.barStyle = UIBarStyleBlackOpaque; en realidad hace que la barra de herramientas se ponga negra, por lo que las conexiones no se estropean ni nada ... Gracias por la respuesta. – Stunner

12

El código debería funcionar ... hay algunas sugerencias que podría hacer. En lugar de:

[toolbar setItems:[NSArray arrayWithObject:lastUpdateLabel]]; 

intente esto:

[toolbar setItems:[NSArray arrayWithObject:lastUpdateLabel] animated:YES]; 

Además, dado que está utilizando un UINavigationController, NavControllers vienen con su propia barra de herramientas que se puede utilizar si lo desea.Por defecto es oculta, lo que se puede hacer visible al hacer esto:

self.navigationController.toolbarHidden = NO; 

y puede configurar sus elementos de la barra al hacer esto:

[self setToolbarItems:[NSArray arrayWithObject:lastUpdateLabel]]; 

Esperanza bits tid este le ayuda. ¡buena suerte!

+0

Gracias, encontré el auto.navigationController.toolbarHidden = NO; para ser de utilidad/trabajo para mí. Sin embargo, todavía estoy experimentando una barra de herramientas en blanco. Por favor, mira las ediciones que hice a mi pregunta, arriba. – Stunner

+2

parece que está utilizando dos barras de herramientas diferentes. si desea usar la barra de herramientas de navegación, debe mencionarla usando "self.navigationController.toolbar". Si está utilizando su propia barra de herramientas, puede mencionarla usando "self.toolbar", si se ha configurado como una propiedad. sus subvistas parecen estar agregadas a su propia barra de herramientas, pero los elementos se están configurando para la barra de herramientas de navegación. ahí es donde comenzaría a buscar el problema. – Bittu

0

Los botones deben ser agregados por viewController empujados por navigationController. El navController contiene la barra, pero los elementos de la barra están controlados (agregados) por el viewController que se muestra. De esta forma, cada tipo diferente de vc tiene su propia barra.

Así que tome ese código barbuttonitem y pliéguelo en la sección init de la vc, y disfrute.

0

// prueba esta.

- (void)viewDidAppear:(BOOL)animated 
{ 
    [toolbar setItems:[NSArray arrayWithObject:lastUpdateLabel]]; 
} 
0

Puede añadir etiquetas a la barra de herramienta directamente si u han instanciado con marco de ... por ejemplo

UILabel *lbl=[[UILabel alloc]initWithFrame:CGRectMake(7,7,200,30)]; 

    [lbl setBackgroundColor:[UIColor clearColor]]; 

    [lbl setText:@"Test lbl"]; 

    [_toolBar addSubview:lbl]; 
Cuestiones relacionadas