Soy nuevo en la Mac. Estoy tratando de actualizar una celda en particular en NSTableView sin utilizar -reloadData
, como -reloadData
actualiza toda la tabla. Lo intenté todo, pero todo fue en vano. Estoy tratando de hacer algo similar a lo que solíamos hacer en CListCtrl en MFC o en .NET.¿Cómo actualizar NSTableView sin usar -reloadData?
Respuesta
Tenga una mirada en reloadDataForRowIndexes:columnIndexes:
método. Para actualizar una única celda, la siguiente debe funcionar:
[yourTable reloadDataForRowIndexes:[NSIndexSet indexSetWithIndex:row]
columnIndexes:[NSIndexSet indexSetWithIndex:column]];
Enlace de documentos: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableView_Class/Reference/Reference.html#//apple_ref/occ/instm/NSTableView/reloadDataForRowIndexes:columnIndexes: –
Si bien esta es la solución correcta, se debe mencionar que reloadData() simplemente vuelve a presentar las celdas visibles actualmente y no toda la tabla. – Matt
Por lo general, la actualización de toda la tabla a través de reloadData:
es el patrón de diseño correcto. ¿Por qué eres reacio a hacerlo? ¿Es por razones de eficiencia, o está confiando en la tabla para guardar algún estado y volver a cargar todos los datos interfiere con eso? Este último suele ser un signo de que debe replantearse su arquitectura.
Quiero hacer esto debido a la eficiencia.Al igual que necesito actualizar 8-10 celdas por segundo, en este caso no quiero que toda la tabla se actualice una y otra vez. – Omayr
Esta es una diferencia fundamental entre la forma en vistas suelen trabajar en cacao y cómo funcionan en algunos otros marcos. NSTableView lo expone una API -reloadDataForRowIndexes:columnIndexes:
, como señala Vladimir, pero se dará cuenta de la ausencia de un "withObject:" parámetro.
Esto se debe a que las vistas y los controles de Cocoa son y no diseñados para que también actúen como contenedores de datos. Por el contrario, son para la presentación y la interacción de datos gestionados por algún otro objeto modelo, generalmente a través de un controlador intermedio de algún tipo.
Dada una vista de tabla, por ejemplo, si el modelo ha informado a su controlador que algunos datos en particular ha cambiado, el controlador puede invalidar la parte visualizada de la tabla que asigna a ese valor - si hay aun es una muestra porción de la mesa. La próxima vez que se dibuje, la tabla solicitará a su fuente de datos (el controlador) los valores que presentará para el área que necesita volver a dibujar.
Por lo tanto a pesar de la similitud superficial en la interacción del usuario, es probable que desee volver a examinar la forma de escribir el código para implementar la interfaz de usuario. Al final, terminará con un código de estilo Model-View-Controller mucho más detallado; El precio es que tendrá que representar realmente su modelo más a fondo de lo que podría haberlo hecho en marcos que no requirieran tal separación de preocupaciones.
un ejemplo completo de la utilización de reloadDataForRowIndexes para actualizar todas las filas, pero sólo una sola columna:
int col = 2 ;
[self.myTable reloadDataForRowIndexes:
[NSIndexSet indexSetWithIndexesInRange:
NSMakeRange(0,self.myTable.numberOfRows)]
columnIndexes:
[NSIndexSet indexSetWithIndex:col]
];
o todas las columnas de una sola fila:
int row = 2 ;
[self.myTable reloadDataForRowIndexes:
[NSIndexSet indexSetWithIndex:row]
columnIndexes:
[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, self.myTable.numberOfColumns)]
];
En su segundo ejemplo, 'reloadDataForRowIndexes: columnIndexes:' no puede tomar un NSRange, por lo que debe hacer algo como: '[NSIndexSet indexSetWithIndexesInRange: NSMakeRange (0, _tableView.numberOfColumns)]' – TheNextman
- 1. UIPickerView reloadData
- 2. Cómo usar NSArrayController para rellenar datos en NSTableView
- 3. ios: [tableView reloadData]
- 4. ¿Qué pasa con [UITableView reloadData]?
- 5. Desinstalar y actualizar Ruby en una Mac sin usar RVM
- 6. ¿Cómo actualizar automáticamente una aplicación sin ClickOnce?
- 7. Ordenando NSTableView
- 8. TableView reloadData vs beginUpdates y endUpdates
- 9. OAuth (Instagram) sin actualizar
- 10. Comentar SVN sin actualizar
- 11. UITableView reloadData - cellForRowAtIndexPath no activado
- 12. Cómo actualizar los atributos sin validación
- 13. Cómo actualizar objeto sin datos contextos de
- 14. ¿Cómo hacer que NSTableView sea transparente?
- 15. NSTableView con celdas personalizadas
- 16. Ocultando el encabezado NSTableView?
- 17. sendAsynchronousRequest con tableView reloadData delay en draw
- 18. Cuándo usar SELECCIONAR ... PARA ACTUALIZAR?
- 19. ACTUALIZAR consulta sin cláusula DONDE
- 20. VS2010 Limpiar Web.configs - sin actualizar
- 21. NSTableView seccionado usando NSArrayController
- 22. NSTableView + clave de eliminación
- 23. ¿Cómo deshabilitar la ordenación en NSTableVIew?
- 24. ¿Cómo añadir un NSTableView desplazable mediante programación
- 25. Interruptor directorio local de trabajo sin actualizar
- 26. ¿Cómo usar RSpec sin rieles?
- 27. NSTableView - Desactivar selección de fila
- 28. NSTableView makeViewWithIdentifier través de nibs
- 29. Hibernar, insertar o actualizar sin seleccionar
- 30. ¿Qué es exactamente lo que reloadData llama?
quiero aclarar un poco más, no me No quiero que la mesa sea redibujada. Quiero algún método en el que pueda pasar row_number, column_number o NSTableColumn, y el objeto de datos (id). – Omayr
@ Mike Abdullah me hubiera gustado que tenían propuesto una solución en lugar! – Omayr
Al unirse a una comunidad, generalmente es una buena idea tomar nota y adoptar las convenciones de esa comunidad. En el caso de la comunidad de desarrolladores de Mac, decir "MAC" tiende a indicar ignorancia de la plataforma. –