2012-11-14 6 views
8

Ich entwickle eine Wrapper-Anwendung für eine Website. Grundsätzlich wird die mobile Version einer Site in UIWebView geöffnet. Einige Links auf der Website verweisen auf PDFs.Hinzufügen "Öffnen in iBooks" zu UIWebView

Wenn dieselbe Site in Safari geöffnet wird und ein Link zu PDF angezapft wird, wird ein schöner schwarzer Streifen mit "Öffnen in iBooks" über der PDF angezeigt. Wie auf dem Bild unten:

enter image description here

Wie konnte ich das gleiche suchen Streifen in meiner Anwendung implementieren?

EDIT:

Ich bin nicht fragen, wie eine schwarze Taste auf durchscheinenden Hintergrund zu erstellen.

Ich interessiere mich für den gesamten Workflow reproduzieren:

  • Benutzer navigiert zu einer PDF
  • Ein Streifen (Ansicht) Popups , wenn und nur wenn dort iBooks App ist (oder jede andere PDF-Viewer) Eingerichtet.
  • Durch Tippen auf eine Schaltfläche im Popup wird das Dokument an diese App übertragen und die App geöffnet.
+0

die VIEW (der Streifen?) Oder die Funktionalität der Taste? –

+0

@ Daij-Djan siehe Update auf die Frage – Bobrovsky

+0

, was ich befürchtet: D jk können Sie Ibooks URL-Schema verwenden –

Antwort

24

Um zu überprüfen, ob iBooks Sie anrufen können installiert ist:

BOOL iBooksInstalled = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"ibooks://"]]; 

können Sie eine Liste von Anwendungen (warum Grenze zu iBooks nur?;) Präsentieren) mit:

//use the UIDocInteractionController API to get list of devices that support the file type 
NSURL *pdfURL = // your pdf link. 
UIDocumentInteractionController *docController = [UIDocumentInteractionController interactionControllerWithURL:pdfURL]; 

//present a drop down list of the apps that support the file type, click an item in the list will open that app while passing in the file. 
[docController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES]; 

Beachten Sie, dass dies im iOS-Simulator nur funktioniert, wenn Sie eine App erstellt haben, die PDFs liest!

Wenn Sie wirklich nur die Möglichkeit haben möchten, das PDF in iBooks zu öffnen, können Sie versuchen, die URL der Datei an das Schema @ "ibooks: //" oder eines der beiden anderen Schemata anzuhängen die iBooks bieten (die für Bücher im iBook Store funktionieren, aber ich bin nicht sicher, ob es auch für andere URLs funktioniert), die @ "itms-books: //" und @ "itms-bookss: //" sind. Sie können dann so etwas wie:

NSURL *iBooksURLScheme = [NSURL URLWithString:@"ibooks://"]; 
NSString *fileURLString = // your file URL as *string* 
NSURL *finalURL = [iBooksURLScheme URLByAppendingPathComponent:fileURLString]; 

[[UIApplication sharedApplication] openURL:finalURL]; 
+0

Vielen Dank für die ausführliche Antwort. – Bobrovsky

+0

Ich weiß, das ist eine alte Frage, aber wenn Sie diese Art unter ARC verwenden, erhalten Sie einen Fehler. self.docInteractionController = [UIDocumentInteractionController interactionControllerWithURL: url]; –

+1

Nur eine Randnotiz: URL für UIDocumentInteractionController muss lokal sein, Datei-URL (nicht die, die verwendet wird, um PDF zu UIWebView herunter zu laden). Sie müssen also heruntergeladene PDF-Dateien zuerst mit der PDF-Erweiterung speichern (am besten in Ihrem Dokumentenverzeichnis) und dann eine URL mit [NSURL fileURLWithPath: pdfPath] erstellen. – Lukasz

1

(Beantwortet wieder als meine vorherige Antwort nicht enthalten Code Apologies.)

Für eine Lösung, die mein Problem behoben fand ich ein gutes Beispiel here.

Ich habe es hier geschnitten und eingefügt, wenn es jemand hilft. Voller Kredit absoluteripple.com

Vorausgesetzt, dass Ihre Klasse ist Viewcontroller genannt, dann in der ViewController.h Datei:

  
@interface ViewController : UIViewController 
            { 
                UIDocumentInteractionController *docController; 
            } 

die folgenden Methoden in Viewcontroller hinzufügen.m: // - stellen Sie den UIDocumentInteraction Regler nach oben und setzen Sie den Delegierten selbst, damit wir die Callback-Ereignisse

- (UIDocumentInteractionController *) setupControllerWithURL:(NSURL *)fileURL 
                                               usingDelegate:(id <UIDocumentInteractionControllerDelegate>)         interactionDelegate { 
    
            UIDocumentInteractionController *interactionController = 
            [UIDocumentInteractionController interactionControllerWithURL:fileURL]; 
            interactionController.delegate = interactionDelegate; 
    
            return interactionController; 
            } 

// verarbeiten kann - der Schlüssel Instanzmethode ist hier die presentOptionsMenuFromBarBUttonItem // - es wird angenommen, dass es ein BarButtonItem genannt _btnActions ist

  

    - (void)showOptionsMenu 
            { 
                NSURL *fileURL = [NSURL fileURLWithPath:@"THE_FILE_URL_PATH"]; 
                docController = [self setupControllerWithURL:fileURL 
                                       usingDelegate:self]; 
                bool didShow = [docController presentOptionsMenuFromBarButtonItem:_btnActions 
                                                                 animated:YES]; 
                if (!didShow) { 
                        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" 
                                                            message:@"Sorry. The appropriate apps are not found on this device." 
                                                           delegate:nil 
                                                  cancelButtonTitle:@"OK" 
                                                  otherButtonTitles: nil]; 
                        [alert show]; 
                } 
            } 
  1. ein Verfahren Fügen Sie die oben aufzurufen, wenn Sie die Anwendungen zeigen möchten, dass Sie die Datei auf In diesem Beispiel senden könnte, wird ein UIBarButton auf folgende IBActions verdrahtet:
 
    - (IBAction)ActionButtonClicked:(id)sender { 
            [self showOptionsMenu];} 

That ist es. Wenn Sie auf die Schaltfläche klicken, wird ein Aktionsblatt angezeigt (alle mit der UIDocumentInteractionController-Klasse von Apple), in dem die Apps (falls vorhanden) angezeigt werden, an die Sie die Datei senden könnten.

Sie können die folgenden Delegatmethoden optional implementieren:

- (void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(NSString *)application 

- (void)documentInteractionController:(UIDocumentInteractionController *)controller didEndSendingToApplication:(NSString *)application 

- (void)documentInteractionControllerDidDismissOpenInMenu:(UIDocumentInteractionController *)controller 
Verwandte Themen