2012-08-01 11 views
5

Quiero abrir el .nib de "TableViewController" cuando se hace clic en un botón hecho en mi UIToolBar. Pero lo siguiente no permite que el clic muestre una nueva vista. ¿Cómo rectifico esto? Por favor muéstrame dónde me salió mal y qué debería reemplazarse y por qué.¿Cómo dar la acción de barbuttonitem?

//Here's the selector in my overlay. 
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: 
UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed)]; 

//Here's how I made my action. Btw, the uitoolbar has no nib, it's an overlay on the 
//(camera mode). 

-(void)doneButtonPressed { 
TableViewController *tableView = [[TableViewController alloc] 
initWithNibName:@"TableViewController" bundle:nil]; 
tableView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[self presentModalViewController:tableView animated:YES]; 
} 


//Yet nothing happens when I click on my done button on my overlay. And I've made sure 
// i've imported .h frameworks correctly too. 

Supongamos que se va a abrir una punta de un barbuttonitem que está en una superposición de UItoolbar. ¿Como lo harias?

Me dijeron que para que funcione correctamente, tendría que agregar [barButtonItem addTarget: self action: @selector (doneButtonPressed) forControlEvents: UIControlEventTouchUpInside]; .

Pero si añado que me sale esto:

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: 
UIBarButtonSystemItemDone addTarget:self action:@selector(doneButtonPressed) 
forControlEvents:UIControlEventTouchUpInside]; 

lo que se traduce en mí conseguir un error al leer "método de instancia '- initWithBarButtonSystemItem: objetivo: Acción: forControlEvents:' not found (tipo de retorno por defecto es ' id ') "

En lugar de mostrarme solo el aditivo correcto, muéstreme la solución además del código que he escrito aquí.

Respuesta

5

Si está utilizando XCode 4, puede simplemente presionar Ctrl + Arrastrar BarButtonItem, a su archivo .h, y puede crear una Acción de IB desde allí automáticamente.

+0

Hice el barbuttonitem programáticamente porque la barra de herramientas en la que se encuentra se realizó mediante programación, por lo que utilizar IB no es viable. – Capricorn

1

A UIBarButtonItem sigue el valor predeterminado UIControlEventTouchUpInside y no puede configurarlo. Xcode debe sugerencia automática los métodos de asignación, pero el código correcto es:

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed)]; 

Nota, no hay forControlEvents:.

+0

Entonces, ¿qué debo sospechar si el método nulo no se ejecuta al cambiar a una nueva vista incluso después de haberlo rectificado según sus sugerencias? – Capricorn

+1

Primero, establezca un punto de interrupción y vea si se está llamando al método. También: '[self presentViewController: tableView animated: YES completion: nil];' – runmad

1

Pruebe estos cambios:

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed:)]; 

-(void)doneButtonPressed:(id)sender 
{ 
} 

el objetivo se hace pasar el objeto que inició la acción (es decir, la propia UIBarButtonItem)

En segundo lugar, establece un punto de interrupción en la función de su doneButtonPressed. Si, por ejemplo, tableView se establece en nil, entonces no verá nada. es decir, tal vez haya un problema al crear una instancia de este controlador de vista.

Cuestiones relacionadas