Принцип работы состоит в том, что popover связывает NSView с определенной позицией в окне (с позицией вызывающего контрола интерфейса на форме). NSView содержит пользовательский материал который будет виден в popover.
Начнем. У нас есть окно. Добавим на окно нашей формы кнопку, по которой мы будем вызывать наш popover.
Теперь свяжем наш NSView с Popover View Controller и выберем оутлет view.
Также создадим для кнопки экшен, из которой будет вызываться popover.
- (IBAction)showPopOver:(id)sender;И создадим связку нашего Popover (в списке наших объектов) с оутлетом *popover.
@property (assign) IBOutlet NSPopover *popover;
В экшен кнопки добавим такой код:
[[self popover] showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMaxXEdge];
Здесь макрос NSMaxXEdge будет показывать наш popover вертикально сверху от вызывающего контрола или снизу (в зависимости от вертикального расположения нашего окна). Если нужно показывать слева или справа - NSMaxYEdge.
Выделим наш Popover и в инспекторе атрибутов и в Popover -> Behavior выберем Transient. Этот атрибут будет позволять popover`у удаляться если кликнуть где-то в другом месте окна приложения.
Вот что должно получится:
detachableWindowForPopover - popover который при перетаскивании может преобразовываться в окошко NSWindow. Все тоже очень просто. Добавляем в наш список объектов NSWindow. Размещаем на нем что-то, можно ту же иконку. Выделяем наш popover и связываем delegate (popover`а) с App Delegate - объектом (в списке наших объектов). Теперь в хидер файл добавим NSPopoverDelegate делегат, который позволит нам создавать окно из popove`ра.
#import <Cocoa/Cocoa.h> @interface AppDelegate : NSObject <NSApplicationDelegate, NSPopoverDelegate>Связываем наше добавленное окно с оутлетом, по которому мы будем обращаться к этому окну.
@property (unsafe_unretained) IBOutlet NSWindow *popWindow;Добавляем в .m - файл метод detachableWindowForPopover:
- (NSWindow *)detachableWindowForPopover:(NSPopover *)popover { return [self popWindow]; }< В принципе все. Должно работать. При появлении popove`ра перетаскиваем его в любое место и создается наше окошко.
Немає коментарів:
Дописати коментар