Jak zaimplementować widok na poniższym obrazie.
Widok, który pojawia się, gdy + przycisk jest kliknięty System Preferences > Network
Mam następujące pytania:
- Czy ten system widoku ma określoną nazwę (np. Popover), ponieważ widziałem go w wielu miejscach na Macu.
- Jak go wdrożyć w IB?
- 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 № 1W 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,
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.