ibireme / YYText

Powerful text framework for iOS to display and edit rich text.
MIT License
8.86k stars 1.7k forks source link

YYTextViewDelegate 和 UITextViewDelegate 冲突 #243

Closed wendy006 closed 8 years ago

wendy006 commented 8 years ago

我使用的textView是YYTextView,而其中的链接部分我打算使用原生API中的NSLink而非YYTextHighlight来做。 而原生NSLink需要与UITextViewDelegate中的一个代理方法互动

 - (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL  inRange:(NSRange)characterRange

但是YYTextViewDelegate并没有这个方法。怎么解决呢?

YYTextHighlight我这个项目使用中存在一些问题,故使用NSLink。 谢谢,辛苦了~

ibireme commented 8 years ago

https://github.com/ibireme/YYText#已知问题

YYText 并不能支持所有 CoreText/TextKit 的属性,比如 NSBackgroundColor、NSStrikethrough、NSUnderline、NSAttachment、NSLink 等,但 YYText 中基本都有对应属性作为替代。详情见上方表格。

YYTextView 和 UITextView 并没有继承关系,所以有些东西是冲突的,不能共用。关于点击事件的回调,YYTextViewDelegate 有类似的方法:

- (BOOL)textView:(YYTextView *)textView shouldTapHighlight:(YYTextHighlight *)highlight inRange:(NSRange)characterRange;
- (void)textView:(YYTextView *)textView didTapHighlight:(YYTextHighlight *)highlight inRange:(NSRange)characterRange rect:(CGRect)rect;
wendy006 commented 8 years ago

是的 这个点击事件都在highLight那个属性中,但如果用了NSLink就不可以了。 hightLight格式化后后边跟上的全部字符都带上了hightLight的属性,而hightLight.tapAction回调中的text因此包含了接下来的整篇文章。 你建议将后边非链接的部分去掉格式,但尝试了各种方法都没有去成。

ibireme commented 8 years ago

这属于使用 NSMutableAttributedString 的问题吧,换成 NSLink 应该也会一样的。。

wendy006 commented 8 years ago

可能是我表述错误。 由于使用了hightLight来处理链接点击跳转,hightLight.tapAction回调中我会遍历一下当前text,取出其中的第一个同时带有NSLink属性的字符串,然后跳转到这个地址,但是如果接下来还有其他的带有NSLink的字符串,这个NSLink的点击就被第一个链接给覆盖了。因为他们分享了同一个hightLight属性。

**另外这个富文本输入框是用户即时输入的,需要实时监测输入然后删除不必要的格式。。?还需监测上一步是否插入了链接和图片。。

ibireme commented 8 years ago

highlight 属性应该每次重新 new 一次。另外,URL 可以保存在 highlight.userInfo 里面。