iOS的UITextView-以及它如何使您的生活更轻松。

在本文中,我们将讨论UITextView a。 具体来说,如何使用UITextViewDelegate处理与特定textView相关的动作。 如果您不熟悉此主题,则可以参考Apple的UITextView文档。

UITextView是iOS UIKit框架的一部分,顾名思义,它处理UI组件以及应用程序的图形和界面组件的布局。 您可能知道iOS应用程序的基本体系结构。 如果不这样做,这是一个偷看。

今天,我们将专注于View部分,特别是UIKit框架中的UITextView

UITextViewUIScrollView类的子类,这意味着它继承了其所有功能,这使其具有处理复杂任务的巨大能力,这与其他文本呈现视图(例如UILabel)不同。


UITextView开始 ,默认情况下是UIView的子类。 因此,继承其所有功能,我们可以向特定的textView添加手势。 为了提供示例,我们现在将编写代码以检测用户在UITextView内对特定作品的轻敲,并获取所按下字符的索引。 该代码将如下所示:

第一步是创建一个UITapGestureRecognizer并将其注册到textView

  func registerTap(){ 
let tap = UITapGestureRecognizer(target:self,action:#selector(handleTap))tap.delegate = self textView.isUserInteractionEnabled = true textView.addGestureRecognizer(tap)
}

现在我们已经实例化了轻手势并将其注册到我们在ViewDidLoad()函数中创建的textView中 ,现在我们将继续编写函数handleTap()并在其中执行执行所需功能的逻辑:

  @objc func handleTap(sender:UITapGestureRecognizer){让sendTextView = sender.view为?  UITextView if let textView = sendTextView {let layoutManager = textView.layoutManager // myTextView中的点击位置坐标var location = sender.location(in:sentTextView)location.x-= textView.textContainerInset.left location.y-= textView.textContainerInset .top //点按位置处的字符索引let characterIndex = layoutManager.characterIndex(for:location,in:textView.textContainer,fractionOfDistanceBetweenInsertionPoints:nil)保护let text = textView.text else {return} //如果索引有效,则执行某些操作。 
如果characterIndex <textView.textStorage.length {

}
}
}

让我们分解一下代码:

首先:由于此函数处理UITapGestureRecognizer的操作,因此默认情况下它将采用此手势的参数。 该参数带有在其上进行点击的视图,因此我们可以从中检索视图,在此示例中为UITextView。

第二:从UITextView,我们可以检索layoutManager属性,这是一个仅提供属性,它提供并访问文本容器布局属性。 当我们想要执行或可以访问UITextView中的文本时,这很方便。

该参数还包含轻击的位置 ,如容器视图内的X和Y值,因此我们可以提取该值并减去textView的插图,以获取轻击手势的确切位置。

最后:然后,我们可以获取在textView中按下的字符的索引的确切位置,并从textView的textStorage属性中检索文本,该属性的作用与layoutManager相似,但是代替布局,它处理字符串在textView中。

现在我们有了索引,我们可以在这里停下来,或者继续基于此思想来制作更复杂的逻辑。


使UITextView能够执行此操作的是一些我们可以从上面得出的属性:

1- UITextView像所有其他UIKit组件一样继承自UIView,这使其具有与我们在注册点击手势时所见的功能相同。

2-诸如layoutManger和textStorage之类的属性,这些属性允许访问UITextView中包含的文本以及各种属性。

由于iOS应用程序是事件驱动的,因此您基本上可以执行任何需要用户交互的操作。

这是另一个示例:

假设我们在HTML字符串中嵌入了一个链接,并将该HTML代码放入UITextView中,如下所示:

 让字符串:NSMutableAttributedString = NSMutableAttributedString(字符串:htmlString)string.addAttribute(NSForegroundColorAttributeName,值:UIColor.redColor(),范围:NSMakeRange(0,5))string.addAttribute(String(kCTForegroundColorAttributeName),值:UIColor.redColor() .CGColor作为AnyObject,范围:NSMakeRange(0,5)) 

textView.attributedText =字符串

现在我们需要单击该textView内的链接,但是我们想在打开该链接之前执行自定义操作,即:检查安全性原因。

我们要做的就是遵守UITextViewDelegate,并覆盖此函数:

 类MyClass:UIViewController { 
@IBOutlet私有弱变量textView:UITextView! 覆盖func viewDidLoad(){super.viewDidLoad()textView.delegate = self
}
}扩展名MyClass:UITextViewDelegate {
func textView(_ textView:UITextView,shouldInteractWith URL:URL,in characterRange:NSRange)-> Bool {//执行检查并选择对结果进行处理。 返回false}}

UITextView是一个功能强大的类,可以使您作为开发人员的生活更加轻松,您只需要稍微了解一点即可。 我们在这里尝试显示它可以为您做些什么,现在您需要继续自己的旅程。 记住,实践是完美的:

上蜡,下蜡,丹尼尔·桑。