2011-11-26 9 views
12

Estoy tratando de agregar una matriz de 2 botones a la derecha de una barra de navegación, pero recibo una excepción cuando ejecuto el código.Agregando una matriz de UIButtons a navigationItem.rightBarButtonItem resultados en NSInvalidArgumentException

'NSInvalidArgumentException', razón: '- [UIButton isSystemItem]: Selector no reconocido enviados a instancia

Mi código es bastante simple en realidad:

UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,100,45)]; 
    label.backgroundColor=[UIColor clearColor]; 
    label.text = @"Test 2 Buttons"; 

    UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom]; 
    button1.frame = CGRectMake(00.0f, 0.0f, 32.0f, 32.0f); 

    UIButton *button2 = [UIButton buttonWithType:UIButtonTypeCustom]; 
    button2.frame = CGRectMake(00.0f, 0.0f, 32.0f, 32.0f); 

    NSArray *rightBarButtons = [[NSArray alloc] initWithObjects:button2, button1, nil]; 


    UINavigationItem* navItem = self.navigationItem; 
    navItem.titleView = label; 
    navItem.rightBarButtonItems = rightBarButtons; 
    [rightBarButtons release]; 
    [label release]; 

estoy corriendo en el iPhone 5.0 simulador. ¿Alguna idea? Gracias de antemano. Al

Respuesta

27

No puede agregar directamente UIButtons. Primero debe envolverlos como UIBarButtonItems; no hay advertencia de compilación ya que solo está pasando una matriz.

Crea los elementos del botón de barra usando initWithCustomView:, pasando el botón como vista personalizada. O, según lo que esté en sus botones, cree elementos de botón de barra directamente.

+1

Gracias por la respuesta. Debería haber notado eso. Tan simple :-) – Alan

+0

Reemplace 'UIButton' con' UIBarButtonItem' y funciona. No necesita crearlo con 'initWithCustomView'. Asegúrate de asignar la Matriz de UIBarButtonItems a 'self.navigationItem.rightBarButtonItemS' con ** S ** al final –

+0

@ proca2.0 yes, de ahí **" O, según lo que esté en tus botones, crea el botón de barra artículos directamente. "** – jrturton

1

Está destinado a darle una matriz de UIBarButtonItem objetos no UIButton objetos. Tenga en cuenta que UIBarButtonItem no hereda ni de UIButton ni de UIView.

10

El truco aquí es utilizar objetos UIBarButtonItem en lugar de objetos UIButton. UIBarButtonItems pueden ser creados a partir UIButtons así:

UIBarButtonItem *myItem = [[UIBarButtonItem alloc] initWithCustomView:uibuttonObject]; 

Sin embargo, el uso de UIButtons en una barra de navegación es generalmente una mala idea, cuando UIBarButtonItems tienen el propósito de mirar bastante allí. Considera visitar el UIBarButtonItem Class Reference.

+0

Gracias por realmente deletrearlo. –

Cuestiones relacionadas