2015-11-25 11 views
5

Ciao Vorrei aprire il mio sito web dalla mia cella di visualizzazione tabella nel controller di visualizzazione safari se l'utente è su iOS 9 o successivo. Se l'utente è su iOS 7 o 8, il sito web dovrebbe aprirsi nell'app safari standard.Aprire il controller di visualizzazione safari dalla vista tabella su iOS 9 e aprire in Safari su iOS 8 o 7

Questo è il codice che attualmente uso che apre il 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; 

Credo che questo codice dovrebbe aprire il controller di visualizzazione safari con il mio sito web. Ma non sono sicuro di come combinare entrambi i set di codice.

- (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]; 
} 

Capisco che questo è il codice utilizzato per determinare quale versione di iOS è

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

Ho seguito il tuo consiglio

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

Poi ha aggiunto questo codice sotto la mia tavola didSelectRowAtIndexPath vista delle cellule

 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; 

sto ottenendo l'errore "L'utilizzo di identificatore non dichiarato url" in questa riga di codice

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

Rimozione url alla fine del NSStringWithFormat rende il lavoro di vista del regolatore Safari. Tuttavia su iOS inferiore a 9.0, ad es. 8.4 l'app si blocca.

risposta

18

L'approccio standard e consigliato è verificare la funzionalità, non la versione del sistema operativo. In questo caso, è possibile verificare l'esistenza della classe SFSafariViewController.

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

modificare

L'implementazione di openLink: è sbagliato.

- (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

Ho aggiornato la domanda mostrando ciò che ho fatto e l'errore che sta mostrando. – user5394344

+0

Non stai usando il tuo metodo per usare in sicurezza 'SFSafariViewController'. Non solo, il metodo 'openLink:' è sbagliato. Si tenta di utilizzare 'SFSafariViewController' senza verificare se la classe è disponibile. – Avi

+0

@Avi Se crei un'app per iOS 9 e versioni successive, NON è necessario verificare la disponibilità di Api? – Supertecnoboff