gpt4 book ai didi

ios - 使用 SFSafariViewController 从 UITextView 自动检测到的链接打开网站

转载 作者:可可西里 更新时间:2023-11-01 03:37:43 25 4
gpt4 key购买 nike

我有一个 UIViewController 和一个 UITextView 自动检测其文本中的超链接。它工作正常,但我会使用 SFSafariViewController 打开链接,所以我留在我的应用程序“内部”,而不是打开一个单独的浏览器,这是“开箱即用”的行为。

我已执行下面概述的步骤,但网站仍会打开单独的 Safari 浏览器,而不是在我的应用程序中。我没有收到任何错误或警告,但检测到的网站仍在单独的浏览器中打开,而不是在我的应用程序中打开。 UITextViewDelegate 方法似乎没有被调用(我输入了一条日志语句来检查)。

我查看了 UITextViewDelegate,我想我想使用这种方法打开 UITextView 检测到的网站:

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange {
// Fill code in here to use SFSafariViewController
return YES;
}

到目前为止我做了什么:

1)导入SafariServices,做delegate声明,在MyViewController中声明一个delegate属性。h

@import SafariServices;

@interface MyViewController : UIViewController <UITextViewDelegate, SFSafariViewControllerDelegate>

@property(nonatomic, weak, nullable) id< SFSafariViewControllerDelegate, SFSafariViewControllerDelegate > delegate;

2) 在我的 .m 文件中添加了一个委托(delegate)部分,并尝试从上面的 stub 中填充此方法:

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange {
SFSafariViewController *websiteToOpen = [[SFSafariViewController alloc]initWithURL:URL entersReaderIfAvailable:YES];
websiteToOpen.delegate = self;
[self presentViewController:websiteToOpen animated:YES completion:nil];
return YES;
}

我确定 100% 是我搞砸了,但我无法越过终点线。我错过了什么?

最佳答案

以防有人正在寻找 Swift 3 实现。

有效的解决方案:

1.导入Safari服务

import SafariServices

2.创建属性文本,添加链接,将字符串分配给textView

let myLink = "google.com"
let myText = "here is my link: \(myLink)"
let myAttributedText = NSMutableAttributedString(string: myText)
let rangeOfMyLink = myText.range(of: myLink)
if rangeOfMyLink.location != NSNotFound {
myAttributedText.addAttributes([NSLinkAttributeName: myLink], range: rangeOfMyLink)
}
myTextView.attributedText = myAttributedText
myTextView.delegate = self

3.向VC添加委托(delegate):

class MyViewController: UIViewController, UITextViewDelegate

4.添加委托(delegate)方法:

func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool {
let safariVC = SFSafariViewController(url: URL)
present(safariVC, animated: true, completion: nil)
return false
}

希望对您有所帮助!

关于ios - 使用 SFSafariViewController 从 UITextView 自动检测到的链接打开网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33006133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com