2012-11-14 11 views
8

Zajmuję się tworzeniem aplikacji otoki dla witryny. Zasadniczo otwiera mobilną wersję strony w UIWebView. Niektóre linki na stronie wskazują na pliki PDF.Dodaj "Otwórz w iBooks" do UIWebView

Po uruchomieniu tej samej witryny w Safari i kliknięciu linku do pliku PDF na czarnym tle wyświetlany jest ładny czarny pasek z napisem "Otwórz w iBooks". Jak na zdjęciu poniżej:

enter image description here

Jak mogłaby wdrożyć ten sam patrząc pasek w mojej aplikacji?

EDIT:

Jestem nie pytając o sposób tworzenia czarnego przycisku na półprzezroczystym tle.

Jestem zainteresowany odtwarzając cały obieg:

  • użytkownik nawiguje do pliku PDF
  • Pas (Widok) popups wtedy i tylko wtedy, gdy jest iBooks app (lub jakakolwiek inna przeglądarka plików PDF) zainstalowany.
  • Stuknięcie przycisku w wyskakującym okienku przesyła dokument do tej aplikacji i otwiera się aplikacja.
+0

widoku (Pasek?) Lub funkcjonalność przycisku? –

+0

@ Daij-Djan, patrz aktualizacja do pytania – Bobrovsky

+0

, czego się obawiałem: D jk możesz używać schematu url urn ibooks –

Odpowiedz

24

Aby sprawdzić, czy iBooks jest zainstalowany można nazwać:

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

można przedstawić listę wniosków (dlaczego ograniczenie tylko do iBooks;)) przy użyciu:

//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]; 

Zauważ, że to nie działa na Symulator iOS, chyba że stworzyłeś aplikację, która czyta pliki PDF!

Jeśli naprawdę chcesz tylko zezwolić na otwieranie pliku PDF w programie iBooks, możesz spróbować dołączyć adres URL pliku do schematu @ "ibooks: //" lub jednego z dwóch pozostałych schematów które zapewniają iBooks (które działają na książki w sklepie iBook Store, ale nie jestem pewien, czy działa również w przypadku innych adresów URL), które są @ "itms-books: //" i @ "itms-bookss: //". Następnie można zrobić coś takiego:

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

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

Dziękuję za szczegółową odpowiedź. – Bobrovsky

+0

Wiem, że to stare pytanie, ale jeśli użyjesz tego w ARC, dostaniesz błąd. self.docInteractionController = [UIDocumentInteractionController interactionControllerWithURL: url]; –

+1

Tylko jedna uwaga: adres URL dla UIDocumentInteractionController musi być lokalny, plik url (nie ten, który był używany do downlaod pdf do UIWebView). Musisz najpierw zapisać pobrane dane pdf z rozszerzeniem pdf (najlepiej do katalogu z dokumentami), a następnie utworzyć adres URL za pomocą [NSURL fileURLWithPath: pdfPath]. – Lukasz

1

(Odpowiedział znowu jak mojej poprzedniej odpowiedzi nie zawierają kod Przepraszamy.)

rozwiązania, które stały mój problem znalazłem świetny przykład here.

Wycinałem i wklejałem go tutaj, a przy okazji pomaga komuś. Pełna kredytowej absoluteripple.com

Zakładając, że klasa jest nazywany ViewController, a następnie w pliku ViewController.h:

  
@interface ViewController : UIViewController 
            { 
                UIDocumentInteractionController *docController; 
            } 

Dodaj następujące metody w ViewController.m: // - skonfigurować kontroler UIDocumentInteraction i ustawić jego delegata do siebie, dzięki czemu możemy obsłużyć zdarzenia zwrotne

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

// - klucz metody instancji jest tu presentOptionsMenuFromBarBUttonItem // - zakłada się tutaj, że nie jest to BarButtonItem nazywa _btnActions

  

    - (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. Dodaj metodę wywołać powyższe, jeśli chcesz pokazać aplikacje, które można wysłać plik do W tym przykładzie UIBarButton jest podłączony do następujących IBActions:
 
    - (IBAction)ActionButtonClicked:(id)sender { 
            [self showOptionsMenu];} 

Że jest to. Po kliknięciu przycisku pojawi się arkusz czynności (wszystkie obsługiwane przez klasę UIDocumentInteractionController firmy Apple), który pokazuje aplikacje (jeśli istnieją), do których można wysłać plik.

Opcjonalnie można wdrożyć następujące metody Delegat:

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

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

- (void)documentInteractionControllerDidDismissOpenInMenu:(UIDocumentInteractionController *)controller