/ / Dodawanie widoku rozwijanego w NSWindow - macos, cocoa, appkit

Dodanie widoku rozwijanego w NSWindow - makra, kakao, appkit

Jak zaimplementować widok na poniższym obrazie.
Widok, który pojawia się, gdy + przycisk jest kliknięty System Preferences > Network wprowadź opis obrazu tutaj


Mam następujące pytania:

  1. Czy ten system widoku ma określoną nazwę (np. Popover), ponieważ widziałem go w wielu miejscach na Macu.
  2. Jak go wdrożyć w IB?
  3. Czy można to zrobić w oknie popover zamiast NSWindow? (Lub jest to możliwe tylko w pasku narzędzi NSWindow)

Odpowiedzi:

1 dla odpowiedzi № 1

W kakao nazywane są arkuszami. Spójrz na przewodnik programowania arkuszyjednak jest to strasznie nieaktualne!

Musisz zadzwonić -beginSheet:completionHandler: w oknie, które chcesz wyświetlić arkusz. Jeśli masz aplikację na jedno okno, możesz poprosić AppDelegate o okno i uruchomić arkusz w ten sposób,

// 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;
}
}];

Zauważysz, że gdy arkusz zakończy się, zwróci pewną odpowiedź modalną - wrócimy do tego punktu w krótkim czasie.

Następnie musisz zaimplementować treść, którą Tychcesz wyświetlić w arkuszu; należy to zrobić w NSWindow. Łatwiej jest używać NSWindowController i zaimplementować okno w osobnym pliku XIB. Na przykład, patrz poniżej,

NSWindow zawierający elementy do wyświetlenia w arkuszu.

Teraz musisz zaimplementować kod w twoim niestandardowym NSWindowController (lub zwykły NSWindow, jeśli jesteś stary i kochaszzarządzać własnym ładowaniem NIB), który wyda prawidłową odpowiedź modalną. Tutaj podłączyłem przyciski anulowania i OK do następujących metod działania,

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

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

Odpowiedź modelu zostanie wysłana do bloku obsługi zakończenia.

Przykładowy projekt na github.