2009-06-28 13 views
6

Sto provando a inserire del testo normale in iPhone Pasteboard. Il seguente codice non sembra funzionare:Utilizzo di base del pasteboard per iPhone

UIPasteboard *pboard = [UIPasteboard generalPasteboard]; 
NSString *value = @"test"; 
[pboard setValue: value forPasteboardType: @"public.plain-text"]; 

Suppongo che il problema sia nell'argomento tipo PasteBoard. Passando a @"public.plain-text" non succede nulla. Passando allo kUTTypePlainText il compilatore si lamenta del tipo di puntatore incompatibile, ma non si arresta in modo anomalo e non accade nulla. Anche l'utilizzo di kUTTypePlainText sembra richiedere il collegamento con MobileCoreServices, che non è menzionato nei documenti.

+2

Posso chiederti perché stai facendo questo invece di usare il metodo - [UIPasteboard setString:]? Inoltre, cosa intendi con "non succede nulla?" Cosa ti aspettavi che accadesse esattamente? Come lo stai determinando? –

risposta

8

In risposta ai commenti e alla mia domanda:

  • Impostazione delle opere di proprietà pasteboard stringa.
  • L'utilizzo di setValue:forPasteboardType: funziona anche se si utilizza kUTTypeUTF8PlainText anziché kUTTypePlainText per il tipo di cartoncino.

non avevo notato la proprietà della stringa perché sono andato direttamente al "Vedere e impostare singola carta che danno Items" sezione compiti.

Il modo in cui stavo testando era facendo clic in un campo di testo e vedere se compariva il pop-up incolla.

Non so ancora dove nei documenti vengono spiegati i tipi UTT per l'iPhone, incluso dove trovarli (Framework, #include file), sembra che il documento "Uniform Type Identifiers Overview" sia ancora orientato verso Mac OS. Poiché le costanti mi hanno dato un avviso di mancata corrispondenza di tipo, ho pensato che stavo facendo qualcosa di sbagliato, per questo motivo ho provato a utilizzare un valore letterale NSString.

+1

Non ha niente a che fare con l'orientamento verso Mac OS X, come ho spiegato, devi solo lanciare la stringa. Le costanti sono dichiarate come CFStringRef, che è un ponte senza pedaggio con NSString. (NSString *) kUTTypePlainText –

19

Utilizzare questa intestazione per ottenere il valore per kUTTypeUTF8PlainText;

#import <MobileCoreServices/UTCoreTypes.h> 

È necessario disporre del framework MobileCoreServices disponibile.

+3

L'implementazione solo per renderla chiara: '[pboard setValue: value forPasteboardType: (NSString *) kUTTypeUTF8PlainText];' –

3

Ecco i miei esperimenti con incollare il testo sul cartone. Sto usando un pulsante per aggiungere il testo in modo programmatico.

#import <MobileCoreServices/MobileCoreServices.h> 

- (IBAction)setPasteboardText:(id)sender 
{ 
    UIPasteboard *pb = [UIPasteboard generalPasteboard]; 
    NSString *text = @"東京京都大阪"; 

    // Works, but generates an incompatible pointer warning 
    [pb setValue:text forPasteboardType:kUTTypeText]; 

    // Puts generic item (not text type), can't be pasted into a text field 
    [pb setValue:text forPasteboardType:(NSString *)kUTTypeItem]; 

    // Works, even with non-ASCII text 
    // I would say this is the best way to do it with unknown text 
    [pb setValue:text forPasteboardType:(NSString *)kUTTypeText]; 

    // Works without warning 
    // This would be my preferred method with UTF-8 text 
    [pb setValue:text forPasteboardType:(NSString *)kUTTypeUTF8PlainText]; 

    // Works without warning, even with Japanese characters 
    [pb setValue:text forPasteboardType:@"public.plain-text"]; 

    // Works without warning, even with Japanese characters 
    [pb setValue:text forPasteboardType:@"public.text"]; 

    // Check contents and content type of pasteboard 
    NSLog(@"%@", [pb items]); 
} 

ho incollato il contenuto in un campo di testo per controllare, e ha cambiato il contenuto del testo di volta in volta per assicurarsi che non era solo ri-utilizzando la pasta precedente.

+0

Cosa devo fare se voglio incollare un'immagine? – Ramakrishna

Problemi correlati