2008-12-09 25 views
5

Necesito mantener un NSPathControl actualizado con la ruta actualmente seleccionada en un NSBrowser, pero estoy teniendo problemas para encontrar una forma de recibir notificaciones cuando la ruta ha cambiado desde NSBrowser. La forma ideal de hacer esto sería observar la ruta de acceso de la clave de acceso en NSBrowser, pero eso le da a un KVO solo observar los métodos establecidos <key> que devuelven el mensaje vacío y sin actualizaciones (setPath devuelve un valor de éxito de bool).¿Cómo puedo mantener un NSPathControl actualizado con la ruta de la celda seleccionada en un NSBrowser

También intenté observar la ruta de la clave selectedCell, pero no recibo notificaciones cuando se cambia la selección.

¿Hay alguna otra forma muy obvia de hacer esto que me falta?

Respuesta

7

cortesía de Rob Keniger encima en Cocoa Dev:

¿Has mirado en el ejemplo SimpleBrowser en/Developer/Ejemplos? Es muestra cómo obtener la selección actual cuando el usuario lo cambia, básicamente configurando la acción del NSBrowser.

Esa es de hecho la manera de hacerlo. Simplemente implemente un método - (void) broswerClicked: (incluido el mapeo en el constructor de interfaz) con lo que quiera que suceda cada vez que la selección cambie dentro de ese método, p.

- (void)browserClicked:(id)browser { 
    self.pathToSelectedCell = [browser path]; // NSPathControl is bound to pathToSelectedCell 
} 
+3

Hola, ese soy yo :-) –

0

Acabo de registrar IB, y parece que NSBrowser tiene un enlace de rutas de índice de selección (una matriz de objetos NSIndexPath) que posiblemente pueda supervisar con KVO. Es extraño, pero no veo ninguna mención de ello en los documentos, por lo que podría necesitar investigar un poco para ver si eso es algo que debería o no debería usar, incluso si parece funcionar. Si lo hace, en su método de observación KVO encontrará la ruta actual del navegador y la convertirá en un NSURL que el control de ruta puede usar.

Si eso no funciona, también están los métodos delegados - (BOOL)browser:(NSBrowser *)sender selectRow:(NSInteger)row inColumn:(NSInteger)column y - (BOOL)browser:(NSBrowser *)sender selectCellWithString:(NSString *)title inColumn:(NSInteger)column.

+0

Ese método delegado, lamentablemente, sólo se vuelve a llamar en respuesta a selectRow: inColumn: siendo enviados al navegador. Si configuro un enlace a las rutas de índice de selección, parece que los métodos de delegado NSBrowser ya no se llaman, por lo que no puedo configurar mi navegador. –

0

A partir de 10,6, se puede averiguar qué elementos están seleccionados, mediante el uso de la devolución de llamada delegado de la siguiente manera:

- (NSIndexSet *)browser:(NSBrowser *)browser selectionIndexesForProposedSelection:(NSIndexSet *)proposedSelectionIndexes inColumn:(NSInteger)column 
{ 
    NSLog(@"New first item of the new selection is at index %@", [proposedSelectionIndexes firstIndex]); 
    // Do something with the selected index or indicies 
    return proposedSelectionIndexes; // Allow the selection to occur by not changing this 
} 
Cuestiones relacionadas