Nie jesteś pewien, czy potrzebujesz Uibutton. Jeśli to, co robisz, wywołuje akcję, a nawet dostosowujesz przycisk do obrazu, to powinno wystarczyć ustawienie UIBarButtonItem
.
Jeśli chcesz uzyskać klocek z UIButton
, aby uzyskać prezentację, prawdopodobnie lepiej będzie ci po prostu oszacować pozycję UIBarButtonItem
. Nie powinno to być zbyt trudne, szczególnie jeśli jest to jedna z tych wartości: UINavigationItem
leftBarButtonItem
lub leftBarButtonItem
.
Generalnie używam zasady KISS (Keep It Simple, Stupid!). Nawet Apple robi to ... kiedy uruchamiasz aplikację z Springboard, aplikacja zawsze rozwija się ze środka ekranu, a nie z ikony aplikacji.
Tylko sugestia.
EDIT
OK, po prostu przeczytać UIPopoverController reference (nigdy nie używałem jeden). Myślę, że to, czego chcesz, to presentPopoverFromBarButtonItem:permittedArrowDirections:animated:
i przekazanie BBI jako pierwszego parametru. Powodem istnienia tej metody jest rozwiązanie twojego problemu - BBI nie mają ram, ponieważ nie są podklasami NSView. Apple wie, że chcesz robić tego rodzaju rzeczy i zapewnia tę metodę. Myślę też, że jeśli użyjesz tej metody, to Twoja autorotacja również będzie działać. Mogę się mylić, dać temu szansę.
Jeśli chodzi o twój własny układ, myślę, że jeśli skopiujesz go w UIView i sprawisz, że będzie to zgodne z BBI, zrobisz to lepiej. To oczywiście zależy od Ciebie.
Tak czy inaczej, uzyskuje się odniesienie do BBI przez połączenie go jako IBOutlet z NIB lub poprzez zapisanie odniesienia do niego podczas tworzenia go w kodzie. Po prostu przekaż to odwołanie do metody popover, którą opisałem powyżej. Myślę, że to może ci pomóc.
moar
BBI jest tylko członkiem swojej klasie - W Ivar z silnym własności odniesienia na nim, być może wiąże się jako IBOutlet do Twojego NIB. Następnie możesz uzyskać do niego dostęp z dowolnej metody w klasie.
Przykład: (nie wiem, że mam popover kontrolera zarządzania pamięcią prawo)
@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
Ty człowiek! Nie byłem w stanie przetestować NavigationItems, ponieważ używam UIToolBar. Działa to bardzo dobrze! Dziękuję Ci! – scooter133