Sto cercando una soluzione semplice per eliminare le righe di NSTableView premendo il tasto Canc. Tutto quello che ho visto durante la ricerca su Google sono state risposte come questa: http://likethought.com/lockfocus/2008/04/a-slightly-improved-nstableview/. Questa mi sembra una soluzione di ingegneria, ma mi piacerebbe sapere se questo è il modo migliore. Qualcuno sa una risposta migliore?NSTableView + Elimina chiave
risposta
Ho implementato qualcosa di simile a LTKeyPressTableView
. Tuttavia, io uso i controller di array, quindi nella mia sottoclasse ho aggiunto IBOutlet NSArrayController * relatedArrayController
. Invece di gestire la richiesta di eliminazione in un delegato, la gestisco direttamente nella sottoclasse poiché la mia sottoclasse si occupa specificamente dell'aggiunta della gestione della chiave Delete. Quando rilevo tasti per la chiave di cancellazione, sto chiamando lo [relatedArrayController delete:nil];
.
IRTableView.h:
#import <Cocoa/Cocoa.h>
@interface IRTableView : NSTableView {
IBOutlet NSArrayController * relatedArrayController;
}
@end
e IRTableView.m:
#import "IRTableView.h"
@implementation IRTableView
- (void)keyDown:(NSEvent *)event
{
// Based on LTKeyPressTableView.
//https://github.com/jacobx/thoughtkit/blob/master/LTKeyPressTableView
id delegate = [self delegate];
// (removed unused LTKeyPressTableView code)
unichar key = [[event charactersIgnoringModifiers] characterAtIndex:0];
if(key == NSDeleteCharacter)
{
if([self selectedRow] == -1)
{
NSBeep();
}
BOOL isEditing = ([[self.window firstResponder] isKindOfClass:[NSText class]] &&
[[[self.window firstResponder] delegate] isKindOfClass:[IRTableView class]]);
if (!isEditing)
{
[relatedArrayController remove:nil];
return;
}
}
// still here?
[super keyDown:event];
}
@end
risultato finale è abbastanza IB-friendly per me, e un bel soluzione semplice da utilizzare in un cacao Attacchi + Nucleo Applicazione dati
Quello che faccio di solito è creare una nuova voce di menu nella barra dei menu dell'applicazione. Qualcosa di simile:
File -> Delete ${Name of Item}
Quindi è possibile creare un collegamento che NSMenuItem
in Interface Builder per puntare a un metodo IBAction definita da qualche parte su entrambi il delegato applicazione o qualche altro controller. L'implementazione di questo metodo dovrebbe eliminare l'elemento dal modello e aggiornare lo NSTableView
.
Il vantaggio di fare un NSMenuItem
fuori dall'azione è che:
- si può dare la voce una scorciatoia da tastiera in Interface Builder. (Come la chiave di cancellazione.)
- Gli utenti che non hanno familiarità con la tua applicazione, hanno paura di premere il tasto Canc, o non hanno accesso a una tastiera per qualsiasi motivo, possono ancora fare uso di questa funzionalità.
Dopo 10.10, NSViewController fa parte della catena di risposta. Quindi il modo più semplice è implementare keyDown nel NSViewController sottoclassato
Buon punto sull'utilizzo della catena di risposta per evitare la sottoclasse (ove possibile). –
Non è necessario creare sottoclasse e catturare keyDown
in NSViewController
.
La voce di menu è collegata al selettore delete:
di First Responder. Se non è presente la voce di menu Delete
, crearne una e collegarla a delete:
di First Responder (cubo rosso).
- Assegnare un equivalente fino alla voce di menu
Delete
(⌫ o ⌘⌫) Nel regolatore vista implementare il metodo
IBAction
Swift:
@IBAction func delete(_ sender: AnyObject)
Objective- C:
-(IBAction)delete:(id)sender
e inserire la logica per eliminare le righe di visualizzazione tabella.
- 1. NSTableView elimina spazio vuoto separando le colonne
- 2. Elimina duplicati senza chiave primaria
- 3. Ripristina Windows Attivazione/Elimina chiave di licenza
- 4. NSUserDefaults non elimina oggetto per la chiave
- 5. Inserimento MySQL su chiave duplicata; Elimina?
- 6. Elimina chiave esterna senza nome in MySql
- 7. Ordinamento NSTableView
- 8. NSTableView con celle personalizzate
- 9. Scorrere NSTableView alla selezione
- 10. Animazione NSTableView incoerente
- 11. Visualizzazione NSTableView vs NSCollectionView?
- 12. Nascondere l'intestazione NSTableView?
- 13. Tasti freccia con NSTableView
- 14. Come rendere NSTableView trasparente?
- 15. NSArrayController + Visualizza NSTableView basato su NSTextField
- 16. Elimina chiave esterna senza conoscere il nome del vincolo?
- 17. Elimina dati con chiave esterna nella tabella di SQL Server
- 18. Elimina basato sulla chiave composita da un'altra tabella
- 19. Elimina elemento dall'array multidimensionale in base alla chiave
- 20. Coloring NSTableView Testo per riga
- 21. Custom NSTableView con NSTableCellView personalizzato?
- 22. Cocoa NSView nella cella NSTableView
- 23. NSTableView statico con righe preimpostate
- 24. Utilizzo di NSPopUpButtonCell con NSTableView
- 25. Cambia colori righe alternate NSTableView
- 26. Visualizzazione NSTableView/NSOutlineView e isGroupItem
- 27. differenza tra NSOutlineView e NSTableView
- 28. Hector (Cassandra) Elimina anomalia
- 29. Opzione per Elimina in cascata per referenze o On Elimina
- 30. Qual è la differenza tra NSTableView e NSTableView basati su celle?
Ciao, Craig. La tua risposta non era quella che mi aspettavo, ma suona piuttosto bene! = D Grazie mille. – Leandro
Haha sì, all'inizio sembra un approccio piuttosto indiretto, ma funziona molto bene, e si prende cura di un sacco di mal di testa. –
a meno che non si abbiano due viste tabella ... – peetonn