委托协议函数未触发UITEXTVIEW



我有一个Swift文件,我正在尝试创建一个自定义类,以处理一个页面上多个文本视图的占位符。我更喜欢单独的课程,因为我认为它的清洁剂可以处理多个视图。问题是,当这些事件发生时,函数 textViewDideDediting textViewDidbeginediting 不会被调用。

我已经通过将延迟设置为代表成功成功地工作了,但是我看不出如何使用多个UitextViews做到这一点。

这是我的代码:

import UIKit
class PostPage: UIViewController, UITextViewDelegate {
    @IBOutlet weak var eventDescription: UITextView!
    @IBOutlet weak var eventTitle: UITextView!
    var placeholderShowing = true
    override func viewDidLoad() {
        super.viewDidLoad()
        // Add a placeholder for the text
        let ph_descr = PlaceHolderHandler(placeholderText: "Description", textBox: eventDescription)
        eventDescription.delegate = ph_descr
        let ph_title = PlaceHolderHandler(placeholderText: "Title", textBox: eventTitle)
        eventTitle.delegate = ph_title
    }
}
 class PlaceHolderHandler: NSObject, UITextViewDelegate {
    var placeholderShowing = true
    var placeholderText = ""
    required init(placeholderText: String, textBox: UITextView) {
        super.init()
        self.placeholderText = placeholderText
        textBox.text = placeholderText
        textBox.textColor = UIColor.lightGray
    }

    // MARK:- UITextViewDelegates
    public func textViewDidBeginEditing(_ textView: UITextView) {
        if self.placeholderShowing {
            textView.text = ""
            textView.textColor = UIColor.black
            self.placeholderShowing = false
        }
    }
    public func textViewDidEndEditing(_ textView: UITextView) {
        if textView.text == "" {
            textView.text = "Description"
            textView.textColor = UIColor.lightGray
            self.placeholderShowing = true
        }
    }
 }

当我选择任何一个UITEXTVIEWS时,我都希望调用相应的函数,并进行相应的调整。

您需要保留phDescrphTitle,就像您的代码一样,它们是本地变量,因此获得viewDidLoad

import UIKit
class PostPage: UIViewController, UITextViewDelegate {
    @IBOutlet weak var eventDescription: UITextView!
    @IBOutlet weak var eventTitle: UITextView!
    var placeholderShowing = true
    var phDescr, phTitle:PlaceHolderHandler!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Add a placeholder for the text
        phDescr = PlaceHolderHandler(placeholderText: "Description", textBox: eventDescription)
        eventDescription.delegate = phDescr
        phTitle = PlaceHolderHandler(placeholderText: "Title", textBox: eventTitle)
        eventTitle.delegate = phTitle
    }
}

还使用骆驼命名变量

我通过将延迟设置为代表,成功地工作了,但是我看不出如何使用多个UITEXTVIEW

来做到这一点

OFF课程您可以将同时设置为PostPage的委托,并且知道哪个是一个完整的使用

func textViewDidBeginEditing(_ textView: UITextView) {
   if textView == eventDescription {
   }
   else {  // eventTitle
   }
} 

最新更新