2009-06-28 10 views
6

Próbuję umieścić zwykły tekst w iPhonie iPhone'a. Poniższy kod prawdopodobnie nie działa:Podstawowy sposób korzystania z pasty na telefon iPhone

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

Zgaduję, że problem jest w argumencie typu PasteBoard. Przekazywanie @"public.plain-text" nic się nie dzieje. Przekazując kUTTypePlainText, kompilator narzeka na niekompatybilny typ wskaźnika, ale nie ulega awarii i nic się nie dzieje. Wydaje się również, że użycie kUTTypePlainText wymaga połączenia z MobileCoreServices, o czym nie wspomniano w dokumentach.

+2

Czy mogę zapytać, dlaczego to robisz zamiast używać metody - [UIPasteboard setString:]? Co masz na myśli mówiąc "nic się nie dzieje?" Czego spodziewałeś się dokładnie? Jak to określasz? –

Odpowiedz

8

Odpowiadając na komentarze i moje własne pytanie:

  • Ustawienie dzieła własności pasteboard ciągów.
  • Używanie setValue:forPasteboardType: działa również wtedy, gdy używam kUTTypeUTF8PlainText zamiast kUTTypePlainText dla typu obszaru roboczego.

Nie zauważyłem właściwość ciąg, bo poszedł bezpośrednio do „Pobieranie i ustawianie pojedyncze przedmioty z tektury” sekcja zadania.

Sposób, w jaki testowałem, polegał na kliknięciu pola tekstowego i sprawdzeniu, czy pojawi się okienko wklejania.

Nadal nie jestem pewien, gdzie w dokumentach typy UTT są wyjaśnione dla iPhone'a, w tym gdzie je zdobyć (Framework, #include), wygląda na to, że dokument "Uniform Type Identifiers Overview" jest wciąż nakierowany na Maca OS. Ponieważ stałe dawały mi ostrzeżenie o niedopasowaniu typu, myślałem, że robię coś nie tak, dlatego po raz pierwszy spróbowałem użyć literału NSString.

+1

To nie ma nic wspólnego z nastawieniem na Mac OS X, jak wyjaśniłem, wystarczy rzucić ciąg. Stałe są zadeklarowane jako CFStringRef, który jest tollfree mostkowany z NSStringiem. Po prostu wykonaj: (NSString *) kUTTypePlainText –

19

Użyj tego nagłówka, aby uzyskać wartość dla kUTTypeUTF8PlainText;

#import <MobileCoreServices/UTCoreTypes.h> 

Konieczne jest udostępnienie struktury MobileCoreServices.

+3

Implementacja mająca na celu uczynienie go krystalicznie czystym: '[pboard setValue: value forPasteboardType: (NSString *) kUTTypeUTF8PlainText];' –

3

Oto moje eksperymenty z wklejaniem tekstu na stół. Używam przycisku, aby programowo dodać tekst.

#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]); 
} 

I wklejona zawartość w polu tekstowym, aby sprawdzić, i zmienił zawartości tekst za każdym razem upewnić się, że nie było po prostu ponowne wykorzystanie poprzedniego pasty.

+0

co powinienem zrobić, jeśli chcę wkleić obrazek? – Ramakrishna

Powiązane problemy