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

3

UITextView上检测到的链接始终为蓝色。没有直接更改颜色的方法。但是,我可以叠加某种过滤器将蓝色更改为例如红色吗?


不错的想法 =) 其他文本怎么样? - Nekto
3个回答

6

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

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

以下代码应该将链接的颜色更改为绿色。 至少对我来说有效! :)

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

我知道现在时间已经很晚了,但是我花费数小时在谷歌上搜索也没有得到结果,所以我想分享一下我的发现。


UIView中没有setUserStyleSheet方法,你确定这个能工作吗? - Gunhan
2
当然,它是不可用的,因为它是私有的。您需要像这样进行前向声明:@interface UIView (Stylesheet) - (void) setUserStyleSheet: (NSString *) str; @end - Norswap
1
UITextView 可能有多个子视图,请检查子视图是否响应 setUserStyleSheet 方法。for (UIView *subview in textview.subviews) { if ([subview respondsToSelector:@selector(setUserStyleSheet:)]) { [subview performSelector:@selector(setUserStyleSheet:) withObject:@"a { color: #00FF00; }"]; } } - situee

3

使用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代理才能使其正常工作。


我曾经考虑过这样做,但是对于我的需求来说,UIWebView实在太“重”了,特别是因为每个表格视图单元格都会有一个。 - cannyboy
我认为这应该是你最好的选择,如果不是唯一的选择的话。我非常想知道是否还有另一种解决方案,因为UIWebView确实对你的问题来说太重了(在我看来,对于任何问题都是如此)。 - bmeulmeester

1

UIwebDocumentView缺少选择器。 导入UIWebDocumentView.h即可获得它。 不幸的是,这是一个私有API,您的应用可能会被苹果拒绝 :-(


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接