Не уверен, что вам нужна кнопка UIB.Если то, что вы делаете, отправляет действие или даже настраивает кнопку с изображением, то UIBarButtonItem
должно быть достаточно.
Если вам нужно взять кадр из UIButton
вДля того, чтобы добиться презентации, я думаю, вам лучше всего просто оценить позицию UIBarButtonItem
.Это не должно быть слишком сложно, особенно если это один или другой из ваших UINavigationItem
* leftBarButtonItem
или rightBarButtonItem
.
Я обычно за ПОЦЕЛУЙ (Keep It Simple, Stupid!) практическое правило.Даже Apple делает это ... когда вы запускаете приложение из Springboard, оно всегда расширяется от центра экрана, а не от значка приложения.
Просто предложение.
РЕДАКТИРОВАТЬ
ОК, я только что прочитал справку UIPopoverController (я никогда не использовал ее).Я думаю, что вы хотите presentPopoverFromBarButtonItem:permittedArrowDirections:animated:
и передать ваш BBI в качестве первого параметра.Причина, по которой метод существует, состоит в том, чтобы решить вашу проблему - у BBI нет фрейма, потому что они не являются подклассами NSView.Apple знает, что вы хотите делать такие вещи, и предоставляет этот метод.Кроме того, я думаю, что если вы используете этот метод, то ваше автоповорот тоже будет работать.Я могу ошибаться по этому поводу, попробуйте.
Что касается вашего настроенного макета, я думаю, что если вы скопируете его в UIView и сделаете BBI-настройку с этим, у вас все получится.Это, конечно, зависит от вас.
В любом случае, вы получаете ссылку на BBI, либо подключая его как IBOutlet к вашему NIB, либо сохраняя ссылку на него при создании в коде.Затем просто передайте эту ссылку методу popover, который я описал выше.Я думаю, что это может сработать для вас.
MOAR
BBI - это просто член вашего класса - iVar с сильным эталонным свойством, возможно, связанный как IBOutlet с вашим NIB.,Затем вы можете получить к нему доступ из любого метода, который вам нужен в классе.
Пример: (не уверен, что у меня есть право на управление памятью контроллера popover)
@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