Как открыть URL в сафари не в веб-просмотре
Я хочу открыть URL-адрес в сафари, outisde приложения, а не в веб-просмотре.
Я реализовал UIWebViewDelegate, но я все еще не могу открыть URL.
В принципе, я не могу нажать на URL.
Ниже приведен код:
-(void)newView:(NSString *)title Description:(NSString *)desc URL:(NSString *)url{
webView =[[UIWebView alloc]initWithFrame:CGRectMake(15, 17, 190, 190)];
webView.backgroundColor=[UIColor clearColor];
webView.delegate=self;
webView.opaque = NO;
[webView loadHTMLString:[NSString stringWithFormat:@"<html><body p style='color:white' text=\"#FFFFFF\" face=\"Bookman Old Style, Book Antiqua, Garamond\" size=\"5\">%@ %@</body></html>", desc,url] baseURL:nil];
v = [[HUDView alloc] initWithFrame:CGRectMake(60, 70, 220, 220)];
cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
cancelButton.frame = CGRectMake(0, 0, 30, 30);
[cancelButton setBackgroundImage:[UIImage imageNamed:@"closebox.png"] forState:UIControlStateNormal];
[cancelButton addTarget:self action:@selector(cancelButtonPressed) forControlEvents:UIControlEventTouchUpInside];
[v addSubview:cancelButton];
[v addSubview:webView];
[self.view addSubview:v];
}
-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
if ( inType == UIWebViewNavigationTypeLinkClicked ) {
[[UIApplication sharedApplication] openURL:[inRequest URL]];
return NO;
}
return YES;
}
Ответы
Ответ 1
Прочитав комментарии, я думаю, что это то, что вы ищете:
Внедрите этот метод:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
из UIWebViewDelegate
и в зависимости от аргумента запроса вы должны вернуть TRUE
или FALSE
. Если вы не хотите, чтобы веб-просмотр открыл его, вы должны позвонить:
[[UIApplication sharedApplication] openURL:request.URL];
как упоминались другие, и верните FALSE
.
Надеюсь, это поможет. Ура!
РЕДАКТИРОВАТЬ: Если ссылки не распознаются в вашем веб-представлении, попробуйте следующее:
[webView setDataDetectorTypes:UIDataDetectorTypeLink]
Ответ 2
Этот ответ был легко доступен через Google:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.apple.com"]];
Просто поместите это в свою кнопку или какое-либо событие, которое вы хотите называть, а затем передайте ему URL-адрес (замените @ "http:/www.apple.com" ).
Ответ 3
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.google.com"]];
Ответ 4
Для iOS 10 +
// Objective-C
UIApplication *application = [UIApplication sharedApplication];
[application openURL:URL options:@{} completionHandler:nil];
// Swift
UIApplication.shared.open(url, options: [:], completionHandler: nil)
Для получения дополнительной информации см. ЭТО.
Ответ 5
Это работает для меня:
[[NSWorkspace sharedWorkspace] openURL: [NSURL URLWithString: @"http://www.apple.com"]];
Ответ 6
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
if (![[NSString stringWithFormat:@"%@",[request URL]] containsString:@"file"] ) {
[[UIApplication sharedApplication] openURL:[request URL]];
return NO;
}
return YES;
}
Я использовал html файл в локальном. В этом html есть некоторые ссылки.
Если вы установите делегат UIWebViewDelegate и этот локальный html откроется в вашем веб-браузере, а другие ссылки откроются в сафари
Я написал "файл", потому что эта ссылка "file:///Users/~/x.app/about.html" в локальном.
Ответ 7
******************** Swift **********************
//MARK: кнопка Нажмите "Открыть" с помощью SafariViewController
private var urlString:String = "https://google.com"
@IBAction func openWithSafariVC(sender: AnyObject)
{
let svc = SFSafariViewController(URL: NSURL(string: self.urlString)!)
svc.delegate = self
self.presentViewController(svc, animated: true, completion: nil)
}
//MARK: SafatriViewConroller Dismiss
func safariViewControllerDidFinish(controller: SFSafariViewController)
{
controller.dismissViewControllerAnimated(true, completion: nil)
}
Ответ 8
Я нашел этот ответ в google, но мне нужно после открытия браузера завершить работу моего приложения и продолжить браузер.
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://google.com"] options: @{} completionHandler: nil];
в Android может сделать Это легко вызвать метод finish()
, как я могу это сделать
Ответ 9
Swift и без веб-просмотра
if let url = NSURL(string: "http://www.apple.com") {
UIApplication.sharedApplication().openURL(url)
}
Ответ 10
Swift 3 (iOS 10+):
if let url = URL(string: "http://www.seligmanventures.com") {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
Ответ 11
Обновлено для Swift 4.2
func webView(_: UIWebView, shouldStartLoadWith: URLRequest, navigationType: UIWebView.NavigationType) -> Bool {
if navigationType == UIWebView.NavigationType.linkClicked {
UIApplication.shared.open(shouldStartLoadWith.url!, options: [:], completionHandler: nil)
return false
}
return true
}