Domanda

voglio trascinare una riga da mia Tableview e rilasciarlo in qualsiasi altro NSTextField in Mac OS X 10.6, e hanno una stringa di testo essere eliminato.

drag and drop già lavora nel mio app (tra un NSTableView ed un NSBrowser), ma non ho avuto successo mettendo tutti i dati sul tavolo di montaggio che possono accettata da applicazioni diverse da quella di origine.

Ecco il codice che ho provato, che ho pensato che sarebbe abbastanza quella di ottenere hte parola "ciao" di essere 'incollato' quando mi calo in qualche altro NSTextField:

-(BOOL) tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes     toPasteboard:(NSPasteboard *)pboard {

    [pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:self];
    [pboard setString:@"hello" forType:NSStringPboardType];

return YES;

}

// -

Non ho mai ottenere il cursore che mostra me sarà accettata la goccia, e semplicemente non funziona.

  • Le cose che ho provato:
    • Uso della versione 10.5 del identificatore cartone, NSStringPBoardType
    • Uso della versione 10.6, NSPasteboardTypeString.
    • Impostazione il proprietario = pari a zero, dal momento che non sto fornendo i dati pigramente.
    • Uso della Archiver digitato: [pboard setData: [NSKeyedArchiver archivedRootObject: @ "Ciao !!"]]

Nessuno dei precedenti hanno lavorato. Penso di avere i concetti correggono: "codificare i dati, dire al tavolo di montaggio quello che hai, poi dare i dati", ma dal momento che altre applicazioni non lo riconoscono, ho il sospetto che non sto dicendo il tavolo di montaggio il tipo di dati corretto .

Dove sto andando male?

Grazie, Woody

È stato utile?

Soluzione

Aggiungi questo awakeFromNib del vostro classe controller:

- (void)awakeFromNib {
    [tableView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:NO];
    // [tableView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:YES];

}

(Ciò presuppone di avere un IBOutlet volta collegata al tableView chiamato tableView). Essere sicuri di fare questo in awakeFromNib o poi. (Per esempio, se si dovesse provare a fare questo nei metodi init del vostro classe controller, i file pennino non sarebbero ancora pienamente caricati, e le tue di IBOutlet sarebbero tutti nil e il messaggio non avrebbe alcun effetto).

Per impostazione predefinita, la maggior parte delle operazioni di trascinamento saranno limitate alla domanda locale piuttosto che tutte le applicazioni. I parametri specifica forLocal: se si fa riferimento a operazioni di trascinamento che sono locali per l'applicazione (all'interno della stessa applicazione), o non locale, che significa tutte le applicazioni. La linea che è commentata è fondamentalmente ciò che hai già il tableView fare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top