No estoy seguro de que necesite el UIButton. Si lo que estás haciendo es despachar una acción, o incluso personalizar el botón con una imagen, el UIBarButtonItem
debería ser suficiente.
Si lo que persigue es agarrar el marco del UIButton
para lograr la presentación, creo que sería mejor que simplemente estimar la posición del UIBarButtonItem
. Esto no debería ser demasiado difícil, especialmente si es uno o el otro UINavigationItem
's leftBarButtonItem
o rightBarButtonItem
.
Generalmente soy para la regla de oro de KISS (Keep It Simple, Stupid!). Incluso Apple hace esto ... cuando inicias una aplicación desde Springboard, la aplicación siempre se expande desde el centro de la pantalla, no desde el ícono de la aplicación.
Solo una sugerencia.
EDITAR
bien, acabo de leer la UIPopoverController reference (nunca he utilizado uno). Creo que lo que quiere es presentPopoverFromBarButtonItem:permittedArrowDirections:animated:
y pasar su BBI como primer parámetro. La razón por la que existe este método es para resolver su problema: los BBI no tienen marco porque no son subclases de NSView. Apple sabe que quieres hacer este tipo de cosas y proporciona este método. Además, creo que si usa este método, también funcionará su autorrotación. Puedo estar equivocado acerca de esto, darle una oportunidad.
Por lo que se refiere a su diseño personalizado, creo que si lo replicas en una UIView y haces la BBI personalizada con eso, lo harás mejor. Esto por supuesto depende de usted.
De cualquier forma, obtiene una referencia de BBI conectándola como IBOutlet con su NIB o guardando una referencia al crearla en el código. Luego solo pasa esa referencia al método popover que describí arriba. Creo que esto podría funcionar para ti.
MOAR
El BBI es sólo un miembro de la clase - una Ivar con una fuerte propiedad referencia en él, tal vez vinculado como un IBOutlet a su SEMILLA. Luego puede acceder desde cualquier método que desee en la clase.
Ejemplo: (no estoy seguro de que tengo el controlador de gestión de memoria popover derecha)
@interface MyViewController : UIViewController {
UIBarButtonItem *item;
}
@property (nonatomic, retain) UIBarButtonItem *item;
@end
@implementation MyViewController
@synthesize item;
-(void)viewDidLoad {
// assuming item isn't in your NIB
item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlus target:self action:@selector(doit)];
self.navigationItem.rightBarButtonItem = item;
}
-(void)doit {
UIPopoverController *popover = [[[UIPopoverController alloc] initWithContentViewController:yourViewController] autorelease];
[popover presentPopoverFromBarButtonItem:self.item permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
// or in the line above, replace self.item with self.navigationItem.rightBarButtonItem
}
@end
¡Tú el hombre! No he podido probar NavigationItems porque estoy usando una UIToolBar. Esto funciona muy bien! ¡Gracias! – scooter133