2014-12-18 3 views
1

Как реализовать представление на следующем изображении.
мнение, которое появляется при + кнопка нажата в System Preferences > Network enter image description hereДобавление слайд-вниз в NSWindow


У меня есть следующие вопросы:

  1. ли эта точка зрения система имеет конкретное имя (как пирог), потому что я видели его во многих местах на Mac.
  2. Как реализовать его в IB?
  3. Можно ли это сделать в окне поповер вместо NSWindow? (Или это возможно только в NSWindow как панель инструментов)

ответ

1

В какао эти называются листы. Взгляните на sheet programming guide, однако это ужасно устарело!

Вам необходимо позвонить -beginSheet:completionHandler: в окно, которое вы хотите отобразить на листе. Если у вас есть приложение, в одном окне можно задать AppDelegate для окна и запуск листа, как это так,

// This code should be in AppDelegate which implement the -window method 
NSWindow *targetWindow = [self window]; // the window to which you want to attach the sheet 
NSWindow *sheetWindow = self.sheetWindowController.window // the window you want to display at a sheet 

// Now start-up the sheet 
[targetWindow beginSheet:sheetWindow completionHandler:^(NSModalResponse returnCode) { 

     switch (returnCode) { 

      case NSModalResponseCancel: 
       NSLog(@"%@", @"NSModalResponseCancel"); 
       break; 

      case NSModalResponseOK: 
       NSLog(@"%@", @"NSModalResponseOK"); 
       break; 

      default: 
       break; 
     } 
    }]; 

Вы заметите, что когда лист завершает он будет возвращать определенный ответ модального --- мы возвратимся к этому моменту в ближайшее время.

Затем вам необходимо реализовать содержимое, которое вы хотите отобразить на листе; это должно быть сделано в NSWindow. Мне гораздо проще использовать NSWindowController и реализовать это окно в отдельном файле XIB. Например, смотрите ниже,

NSWindow containing a items to be displayed in the sheet.

Теперь вам нужно реализовать код в пользовательских NSWindowController (или просто NSWindow если вы старой школы и любят управлять собственной NIB загрузки), который будет выдавать правильный модальный отклик. Здесь я подключил кнопки отмены и ОК следующих способов действия,

- (IBAction)cancelButtonAction:(id)sender { 
    [[[self window] sheetParent] endSheet:self.window returnCode:NSModalResponseCancel]; 
} 

- (IBAction)OKButtonAction:(id)sender { 
    [[[self window] sheetParent] endSheet:self.window returnCode:NSModalResponseOK]; 
} 

модель ответ будет передаваться на ваш блок обработчика завершения.

Sample project on github.

+0

спасибо. Как насчет отображения листа в popover? – Kaunteya

+0

Popovers - это другая технология. Вы не будете показывать лист в popover, вам просто нужно предоставить popover представление для отображения. Прочтите руководство по интерфейсу пользователя, когда и где использовать popover vs. Popovers - довольно новая технология в Cocoa, и API намного приятнее. –

+0

@boyfarell beginSheet кажется устаревшим – Kaunteya

Смежные вопросы