【问题标题】:How to override UITextViewDelegate function如何覆盖 UITextViewDelegate 函数
【发布时间】:2017-10-12 11:06:06
【问题描述】:

我想让我所有的UITextViews 通过打开网页视图而不是打开 Safari 来处理链接点击。如何为我的应用程序中的所有 UITextView 覆盖此委托函数:

func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool

我要放入的代码如下:

func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool {
    let webViewController = WebViewController()
    webViewController.urlToLoad = URL
    present(webViewController, animated: true)
    return false
}

【问题讨论】:

  • 请解释更多...无法理解您想要什么.....您的文本视图是否在同一个视图控制器中?

标签: ios swift uitextview uitextviewdelegate


【解决方案1】:

据我了解,您想做两件事:

  1. 覆盖所有 UITextView 中的函数
  2. 处理事件后呈现 WebViewController

要覆盖您的函数,只需创建一个实现您的委托的 UITextView 扩展并将每个 UITextView 委托设置为它自己:

extension UITextView: UITextViewDelegate {
    public func textView(_ textView: UITextView,
                  shouldInteractWith URL: URL,
                  in characterRange: NSRange) -> Bool {
        let webViewController = WebViewController()
        webViewController.urlToLoad = URL
        parentViewController.present(webViewController, animated: true)
        return false
    }
}

要完成第二部分,你应该在你的文本字段和它的 parentViewController 之间使用一个委托。

需要强调的是,扩展将允许您在所有 UITextView 中实现该方法,但默认情况下,您无法访问 UITextView 中的 parentViewController,因此您需要正确实现委托才能执行parentViewController.present(webViewController, animated: true)

【讨论】:

    【解决方案2】:

    您可以通过创建一个符合UITextViewDelegate 的单独类来实现相同的结果,例如:

    class MyTextViewDelegate:NSObject, UITextViewDelegate
    {
        func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool
        {
            //code for opening in UIWebView
            return true
        }
    }
    

    然后像这样使用它:

    let myTextViewDelegate = MyTextViewDelegate()
    let textView = UITextView()
    textView.delegate = myTextViewDelegate
    

    【讨论】:

      猜你喜欢
      • 2011-07-21
      • 2016-05-04
      • 2012-10-16
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      相关资源
      最近更新 更多