在 iOS 9 上从 table 视图打开 safari 视图控制器并在 iOS 8 或 7 上在 safari 中打开
Open safari view controller from table view on iOS 9 and open in safari on iOS 8 or 7
您好,如果用户使用 iOS 9 或更高版本,我想从 Safari 视图控制器中的 table 视图单元格打开我的网站。如果用户使用 iOS 7 或 8,网站应该在标准的 Safari 应用程序中打开。
这是我目前使用的打开 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;
我相信这段代码应该可以打开我的网站的 safari 视图控制器。但是我不确定如何组合两组代码。
- (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];
}
我知道这是用来确定 iOS 版本的代码
if ([[[UIDevice currentDevice] systemVersion] floatValue] < 9.0) {
我听从了你的建议
- (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]);
}
}
然后在我的 table 视图单元格 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;
我在这行代码中收到错误 "Use of undeclared identifier url"
NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.scanmarksapp.com", url]];
删除 NSStringWithFormat 末尾的 url 可使 Safari 视图控制器正常工作。但是在 iOS 低于 9.0 例如8.4 应用程序崩溃。
标准和推荐的方法是检查功能,而不是 OS 版本。在这种情况下,您可以检查 SFSafariViewController class.
是否存在
if ([SFSafariViewController class] != nil) {
// Use SFSafariViewController
} else {
// Open in Mobile Safari
}
编辑
您对 openLink:
的实施是错误的。
- (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.
}
}
您好,如果用户使用 iOS 9 或更高版本,我想从 Safari 视图控制器中的 table 视图单元格打开我的网站。如果用户使用 iOS 7 或 8,网站应该在标准的 Safari 应用程序中打开。
这是我目前使用的打开 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;
我相信这段代码应该可以打开我的网站的 safari 视图控制器。但是我不确定如何组合两组代码。
- (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];
}
我知道这是用来确定 iOS 版本的代码
if ([[[UIDevice currentDevice] systemVersion] floatValue] < 9.0) {
我听从了你的建议
- (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]);
}
}
然后在我的 table 视图单元格 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;
我在这行代码中收到错误 "Use of undeclared identifier url"
NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.scanmarksapp.com", url]];
删除 NSStringWithFormat 末尾的 url 可使 Safari 视图控制器正常工作。但是在 iOS 低于 9.0 例如8.4 应用程序崩溃。
标准和推荐的方法是检查功能,而不是 OS 版本。在这种情况下,您可以检查 SFSafariViewController class.
是否存在if ([SFSafariViewController class] != nil) {
// Use SFSafariViewController
} else {
// Open in Mobile Safari
}
编辑
您对 openLink:
的实施是错误的。
- (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.
}
}