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.
Mam zaktualizowane pytanie pokazujące, co zrobiłem i wyświetlany błąd. – user5394344
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
@Avi Jeśli tworzysz aplikację na iOS 9 i wyższą, to NIE musisz sprawdzać dostępności usługi APi, prawda? – Supertecnoboff