2015-11-25 19 views
5

Merhaba Kullanıcı, iOS 9 veya üzeriyse, safari görünümü denetleyicisindeki web sitemi tablo görünümü hücremden açmak istiyorum. Kullanıcı iOS 7 veya 8'de ise, web sitesi standart safari uygulamasında açılmalıdır.iOS 9'daki tablo görünümünden safari görünümü denetleyicisini açın ve iOS 8 veya 7'de safari'de açın

Şu anda kullandığım ve şu anda safari açan kod.

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; 

Bu kodun web sitemde safari görünümü denetleyicisini açması gerektiğine inanıyorum. Ancak, her iki kod kümesinin nasıl birleştirileceğinden emin değilim. Anlıyorum

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

bu Sonra tablo görünümü hücresi didSelectRowAtIndexPath altında bu kodu eklenmiş

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

tavsiyeniz ben takip ettim

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

ne olduğunu iOS sürümünü belirlemek için kullanılan koddur

 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; 

Ben NSStringWithFormat sonunda url Çıkarma kodu

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

bu hat üzerinde hata "bildirilmemiş tanımlayıcı url Kullanımı" alıyorum Safari görünümü denetleyicisi çalışma yapar. Ancak iOS’un 9’un altında, ör. 8.4 uygulama çöküyor.

cevap

18

Standart ve önerilen yaklaşım, işletim sistemi sürümü değil, özelliği kontrol etmektir. Bu örnekte, SFSafariViewController sınıfının varlığını kontrol edebilirsiniz.

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

düzenlemek

openLink: Sizin uygulaması yanlıştır.

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

Ne yaptığımı ve gösterdiği hatayı gösteren soruyu güncelledim. – user5394344

+0

"SFSafariViewController" işlevini güvenle kullanmak için yönteminizi kullanmıyorsunuz. Sadece bu değil, 'openLink:' yönteminiz yanlış. Sınıf kullanılabilir olup olmadığını kontrol etmeden 'SFSafariViewController' kullanmayı deneyin. – Avi

+0

@Avi iOS 9 ve üstü için bir uygulama yaparsanız, Api uygunluğunu doğru kontrol etmenize gerek yok mu? – Supertecnoboff