una título titulo que poner etiquetas etiqueta cocoa nstabviewcontroller
https://www.dropbox.com/s/roxaplxy5gtlqns/Again.zip?dl=0

cocoa - titulo - NSTabViewController ignorando las transiciones y la configuración de propagación de títulos



que poner en title (3)

Estoy intentando crear un panel de preferencias para mi aplicación utilizando guiones gráficos y la nueva clase NSTabViewController.

Puedo hacerlo funcionar, pero la configuración de transición en el guión gráfico parece ignorarse. Simplemente salta de una pestaña a otra, con el tamaño de la ventana cambiando instantáneamente.

Pensé que podría depender de si uso autolayout o no, pero no pareció cambiar el comportamiento de transición cuando lo activé.

También tengo la configuración ''Propagar título'' marcada. Esperaba que tomara la etiqueta del elemento de la pestaña, o el título del controlador de vista, y la propagara como el título de la ventana, pero no parece que lo haga.

¿Alguien tiene esto para trabajar?

Aquí hay una aplicación de ejemplo simple que estoy probando con: https://www.dropbox.com/s/roxaplxy5gtlqns/Again.zip?dl=0

Actualización: Tengo este trabajo gracias a Pierre. Terminé haciendo una buena ventana de preferencias de transición mediante la subclasificación de NSTabViewController de la siguiente manera:

@implementation MCPreferencesTabViewController -(void)tabView:(NSTabView *)tabView willSelectTabViewItem:(NSTabViewItem *)tabViewItem { [super tabView:tabView willSelectTabViewItem:tabViewItem]; NSTabViewItem *currentTabItem = tabView.selectedTabViewItem; currentTabItem.view.hidden = YES; tabViewItem.view.hidden = YES; NSWindow *window = self.view.window; NSSize contentSize = tabViewItem.view.fittingSize; NSSize newWindowSize = [window frameRectForContentRect:(CGRect){CGPointZero, contentSize}].size; NSRect frame = [window frame]; frame.origin.y += frame.size.height; frame.origin.y -= newWindowSize.height; frame.size = newWindowSize; [self.view.window setFrame:frame display:NO animate:YES]; } - (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem { [super tabView:tabView didSelectTabViewItem:tabViewItem]; tabViewItem.view.hidden = NO; } @end


Debe hacer que el NSTabViewController sea el delegado de NSTabView.

En Interface Builder, controle y arrastre desde la vista de pestaña Sin sombra al controlador de vista de pestaña y establezca la salida de delegado.

Uno esperaría que Interface Builder configurara esto correctamente al crear un nuevo controlador de vista de pestañas. No es asi.


O en viewDidLoad() para NSTabViewController , incluye

self.tabView.delegate = self


Tenga en cuenta que esto fue así hasta Xcode 9. Desde Xcode 9, debe eliminar (o no agregarlo) esta línea:

self.tabView.delegate = self

De lo contrario, recibirá un error:

*** Assertion failure in -[YourApp.CustomTabView setDelegate:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/AppKit/AppKit-1561.0.100/AppKit.subproj/NSTabView.m:2766 2017-10-25 19:29:06.301282+0200 YourApp[23106:5687795] Failed to set (contentViewController) user defined inspected property on (NSWindow): A TabView managed by a TabViewController cannot have its delegate modified