2016-07-27 16 views
5

W mojej aplikacji Swift 2 użytkownik tworzy ciąg tekstu za pośrednictwem pola tekstowego, a następnie udostępnia go innej aplikacji. W tej chwili mogę udostępnić tekst tylko jako plik .txt, który nie zapewnia opcji Open In Pages po otwarciu okna udostępniania systemu. Jak mogę to zrobić, aby użytkownik miał opcję otwarcia wprowadzonego tekstu jako dokumentu w Pages?Tekst otwarty na stronach-Swift

Czy muszę przekonwertować tekst na format .docx lub .pages? A jeśli tak, to w jaki sposób?

Odpowiedz

4

Sztuką jest zapisanie pliku lokalnie jako pliku .txt, a następnie otwarcie go przy użyciu UIDocumentInteractionController. Oto pełna przykładowy kod:

import UIKit 

class ViewController: UIViewController, UIDocumentInteractionControllerDelegate { 

    var interactionController: UIDocumentInteractionController? 

    func openInPages(body: String, title: String) throws { 
     // create a file path in a temporary directory 
     let fileName = "\(title).txt" 
     let filePath = (NSTemporaryDirectory() as NSString).stringByAppendingPathComponent(fileName) 

     // save the body to the file 
     try body.writeToFile(filePath, atomically: true, encoding: NSUTF8StringEncoding) 

     // for iPad to work the sheet must be presented from a bar item, retrieve it here as below or create an outlet of the Export bar button item. 
     let barButtonItem = navigationItem.leftBarButtonItem! 

     // present Open In menu 
     interactionController = UIDocumentInteractionController(URL: NSURL(fileURLWithPath: filePath)) 
     interactionController?.presentOptionsMenuFromBarButtonItem(barButtonItem, animated: true) 
    } 
} 

połączeń openInPages z dowolnego miejsca w kodzie (jak wtedy, gdy użytkownik naciśnie się Export bar przedmiot przycisk):

openInPages("This will be the body of the new document", title: "SomeTitle") 

this is the result

+0

Dziękuję bardzo; Próbowałem twojej metody (użyłem dokładnie twojego kodu, z wyjątkiem tego, że musiałem nazwać 'openInPages' tak:' do { spróbuj openInPages (flowNote.text, title: "Wyeksportowany z NoteFlow, 1 sierpnia") } złapać _ { print ("nie można otworzyć w Pages.") } } i nic się nie stało podczas wywoływania funkcji (uruchomiłem to na moim fizycznym powietrzu iPada oraz w symulatorze iPhone'a 6.) W konsoli pojawiło się wiele błędów niekrytycznych, wygląda na to, XCode musiał złamać wiązkę ograniczeń w menu Airdrop. (?) Więc potrzebuję pomocy tutaj! – owlswipe

+0

prawdopodobnie próbujesz wywołać tę metodę zbyt wcześnie w cyklu życia aplikacji, patrz zaktualizowany kod – Casey

+0

Nie sądzę, że to jest Wywołanie go z viewdidload, podobnie jak w nowym kodzie, powoduje, że nie jest drukowany żaden błąd, ale również nie powoduje wyświetlenia okna dialogowego udostępniania w ogóle. (Uwaga: komunikaty o błędach z uszkodzonymi ograniczeniami nadal pojawiają się w konsoli, gdy wywoływane są dokładnie tak, jak robisz to z viewdidload.) – owlswipe