ios objective-c iphone safari sfsafariviewcontroller

Abra el controlador de safari desde la vista de tabla en iOS 9 y abra en safari en iOS 8 o 7



objective-c iphone (1)

Hola, me gustaría abrir mi sitio web desde mi celda de vista de tabla en el controlador safari view si el usuario tiene iOS 9 o superior. Si el usuario está en iOS 7 u 8, el sitio web debería abrirse en la aplicación Safari estándar.

Este es el código que uso actualmente que abre 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;

Creo que este código debería abrir el controlador safari view con mi sitio web. Pero no estoy seguro de cómo combinar ambos conjuntos de códigos.

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

Entiendo que este es el código utilizado para determinar qué versión de iOS es

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

He seguido tu consejo

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

Luego agregué este código debajo de mi celda de vista de tabla didSelectRowAtIndexPath

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;

Recibo el error "Uso de URL de identificador no declarado" en esta línea de código

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

La eliminación de url al final de NSStringWithFormat hace que el controlador de vista de Safari funcione. Sin embargo, en iOS por debajo de 9.0, por ejemplo, 8.4 la aplicación se bloquea.


El enfoque estándar y recomendado es verificar la capacidad, no la versión del sistema operativo. En este caso, puede verificar la existencia de la clase SFSafariViewController.

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

editar

Su implementación de openLink: es incorrecta.

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