2015-11-25 17 views
5

Witam Chciałbym otworzyć moją stronę z mojej komórki widoku tabeli w kontrolerze safari, jeśli użytkownik jest na iOS 9 lub nowszym. Jeśli użytkownik korzysta z systemu iOS 7 lub 8, strona powinna się otworzyć w standardowej aplikacji Safari.Otwórz kontroler widoku Safari z widoku tabeli na iOS 9 i otwórz w Safari na iOS 8 lub 7

To jest kod, którego obecnie używam, który otwiera safari.

case 3: { // Follow us section 
     switch (indexPath.row) { 
      case 0: { //Website 
       NSURL *url = [NSURL URLWithString:@"http://www.scanmarksapp.com"]; 
       if (![[UIApplication sharedApplication] openURL:url]) { 
        NSLog(@"%@%@",@"Failed to open url:",[url description]); 
       } 
      } 
       break; 

      default: 
       break; 
     } 

    } 
     break; 

Wierzę, że ten kod powinien otworzyć kontroler Safari w mojej witrynie. Ale nie jestem pewien, jak połączyć oba zestawy kodu.

- (void)openLink:(NSString *)url { 

NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.scanmarksapp.com", url]]; 
if (URL) { 
    SFSafariViewController *sfvc = [[SFSafariViewController alloc] initWithURL:URL]; 
    sfvc.delegate = self; 
    [self presentViewController:sfvc animated:YES completion:nil]; 
} 

#pragma Safari View Controller Delegate 

- (void)safariViewControllerDidFinish:(nonnull SFSafariViewController *)controller { 
[controller dismissViewControllerAnimated:YES completion:nil]; 
} 

rozumiem jest to kod używany do określenia, jaka wersja iOS jest

if ([[[UIDevice currentDevice] systemVersion] floatValue] < 9.0) { 

Śledzę twoja rada

- (void)openLink:(NSString *)url { 

NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.scanmarksapp.com", url]]; 
if (URL) { 
    SFSafariViewController *sfvc = [[SFSafariViewController alloc] initWithURL:URL]; 
    sfvc.delegate = self; 
    [self presentViewController:sfvc animated:YES completion:nil]; 
} else { 
    // will have a nice alert displaying soon. 
} 

if ([SFSafariViewController class] != nil) { 
    // Use SFSafariViewController 
} else { 
    NSURL *url = [NSURL URLWithString:@"http://www.scanmarksapp.com"]; 
    if (![[UIApplication sharedApplication] openURL:url]) { 
     NSLog(@"%@%@",@"Failed to open url:",[url description]); 
    } 
} 

Następnie dodaje ten kod pod moim stole didSelectRowAtIndexPath widok komórkowej

 case 3: { // Follow us section 
     switch (indexPath.row) { 
      case 0: { //Website 
       NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.scanmarksapp.com", url]]; 
       if (URL) { 
        SFSafariViewController *sfvc = [[SFSafariViewController alloc] initWithURL:URL]; 
        sfvc.delegate = self; 
        [self presentViewController:sfvc animated:YES completion:nil]; 
       } else { 
        // will have a nice alert displaying soon. 
       } 

       if ([SFSafariViewController class] != nil) { 
        // Use SFSafariViewController 
       } else { 
        NSURL *url = [NSURL URLWithString:@"http://www.scanmarksapp.com"]; 
        if (![[UIApplication sharedApplication] openURL:url]) { 
         NSLog(@"%@%@",@"Failed to open url:",[url description]); 
        } 

       } 
      } 
       break; 

      default: 
       break; 
     } 

    } 
     break; 

Dostaję błąd „Użyj identyfikatora nierejestrowana URL” na tej linii kodu

NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.scanmarksapp.com", url]]; 

Usuwanie URL na końcu NSStringWithFormat widok sprawia, że ​​praca kontrolera Safari. Jednak w systemie iOS poniżej 9,0, np. 8.4 aplikacja się zawiesza.

Odpowiedz

18

Standardowym i zalecanym podejściem jest sprawdzenie możliwości, a nie wersji systemu operacyjnego. W tym przypadku możesz sprawdzić, czy istnieje klasa SFSafariViewController.

if ([SFSafariViewController class] != nil) { 
    // Use SFSafariViewController 
} else { 
    // Open in Mobile Safari 
} 

edit

Twój realizacja openLink: jest źle.

- (void)openLink:(NSString *)url { 
    NSURL *URL = [NSURL URLWithString:url]; 

    if (URL) { 
     if ([SFSafariViewController class] != nil) { 
      SFSafariViewController *sfvc = [[SFSafariViewController alloc] initWithURL:URL]; 
      sfvc.delegate = self; 
      [self presentViewController:sfvc animated:YES completion:nil]; 
     } else { 
      if (![[UIApplication sharedApplication] openURL:url]) { 
       NSLog(@"%@%@",@"Failed to open url:",[url description]); 
      } 
     } 
    } else { 
     // will have a nice alert displaying soon. 
    } 
} 
+0

Mam zaktualizowane pytanie pokazujące, co zrobiłem i wyświetlany błąd. – user5394344

+0

Nie używasz tej metody do bezpiecznego używania 'SFSafariViewController'. Co więcej, twoja metoda "openLink:" jest zła. Próbujesz użyć 'SFSafariViewController' bez sprawdzania, czy klasa jest dostępna. – Avi

+0

@Avi Jeśli tworzysz aplikację na iOS 9 i wyższą, to NIE musisz sprawdzać dostępności usługi APi, prawda? – Supertecnoboff