使用过滤器更改 UITextView 链接的颜色?

发布于 2024-12-02 09:55:28 字数 64 浏览 2 评论 0原文

UITextView 上检测到的链接始终为蓝色。没有办法直接改变这一点。但是我可以叠加某种将蓝色变为红色的滤镜吗?

The detected links on a UITextView are always blue. There's no way to directly change this. But can I overlay some sort of filter which changes blue to, for instance, red?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

鹤仙姿 2024-12-09 09:55:28

实际上有一种方法可以使用私有 API 来做到这一点。

UITextView 有一个 UIWebDocumentView 类的(单个)子视图,带有选择器 setUserStyleSheet:

以下代码应将链接的颜色更改为绿色。至少,它对我有用! :)

for (UIView *subview in textView.subviews) {
    [subview setUserStyleSheet:@"a { color: #00FF00; }"];
}

我知道这真的很晚了,但是几个小时的谷歌搜索没有让我找到任何地方,所以我想我应该分享这个。

There's actually a way to do this with private API.

A UITextView has a (single) subview of class UIWebDocumentView, with the selector setUserStyleSheet:.

The following code should change the color of the links to green. At least, it worked for me! :)

for (UIView *subview in textView.subviews) {
    [subview setUserStyleSheet:@"a { color: #00FF00; }"];
}

I know this is really late, but hours of Googling got me no where, so I thought I'd share this.

和我恋爱吧 2024-12-09 09:55:28

使用 UITextView 没有实际的方法可以做到这一点,您可以尝试使用 UIWebView 更改其“自动检测链接”属性,然后重新格式化 HTML。

UIWebView *webView = [[UIWebView alloc] init];
webText.delegate = self;
[webView setDataDetectorType:UIDataDetectorTypeLink];

NSString * htmlString = [NSString stringWithFormat:@"<html><head><script> document.ontouchmove = function(event) { if (document.body.scrollHeight == document.body.clientHeight) event.preventDefault(); } </script><style type='text/css'>* { margin:0; padding:0; } p { color:black; font-family:Helvetica; font-size:14px; } a { color:#000000; text-decoration:underline; }</style></head><body><p>%@</p></body></html>", [update objectForKey:@"text"]];

[webText loadHTMLString:htmlString baseURL:nil];

或者一些非常相似的东西。

希望这有帮助。

编辑

不要忘记实现 UIWebView 委托才能使其工作。

There's no practical way to do this with a UITextView, what you can try is using a UIWebView changing its 'auto detect links' property and then reformatting the HTML.

UIWebView *webView = [[UIWebView alloc] init];
webText.delegate = self;
[webView setDataDetectorType:UIDataDetectorTypeLink];

NSString * htmlString = [NSString stringWithFormat:@"<html><head><script> document.ontouchmove = function(event) { if (document.body.scrollHeight == document.body.clientHeight) event.preventDefault(); } </script><style type='text/css'>* { margin:0; padding:0; } p { color:black; font-family:Helvetica; font-size:14px; } a { color:#000000; text-decoration:underline; }</style></head><body><p>%@</p></body></html>", [update objectForKey:@"text"]];

[webText loadHTMLString:htmlString baseURL:nil];

Or something closely similar.

Hope this helps.

EDIT

Don't forget to implement the UIWebView delegate for this to work.

转身以后 2024-12-09 09:55:28

UIwebDocumentView 缺少选择器。
导入 UIWebDocumentView.h 即可获取。
不幸的是,这是一个私有 API,你的应用程序可能会被 Apple 拒绝:-(

UIwebDocumentView has the missing selector.
Import UIWebDocumentView.h to get it.
Unfortunately this is a private API, and yourapp may get rejected by Apple :-(

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文