UItextView 委托 swift - textViewDidBeginEditing 未调用

Posted

技术标签:

【中文标题】UItextView 委托 swift - textViewDidBeginEditing 未调用【英文标题】:UItextView delegate swift - textViewDidBeginEditing not called 【发布时间】:2017-06-01 14:14:43 【问题描述】:

我已经看到处理UITextView 委托的其他主题,但似乎无法找到我的问题来自哪里。 这是我的代码,但是当我修改我的UITextView 时,什么也没有发生,也没有调用textViewDidBeginEditing

import UIKit
var textView1 = UITextView()

class ViewController: UIViewController, UITextViewDelegate 
    override func viewDidLoad() 
        super.viewDidLoad()

        textView1.delegate = self
        textView1 = UITextView(frame: CGRect(x:24,y: 100,width: 340,height: 290))
        textView1.textColor = UIColor.black
        textView1.backgroundColor = UIColor(red: 0.00, green: 0.00, blue: 0.00, alpha: 0.00)
        textView1.text = "textView 1"
        view.addSubview(textView1)
    

    func textViewDidBeginEditing(_ textView: UITextView) 
        print("print1")
    

    func textViewDidEndEditing(_ textView: UITextView)  
        print("print2")
    

我已尝试使用 UITextField,但没有任何改变,委托函数仍未调用。

【问题讨论】:

为什么要创建然后丢弃第一个UITextView 实例? 为什么textView1在类外声明?这不是你应该做的。 【参考方案1】:

只需将您的 textView1.delegate = self 向下移动 2 行。您正在为 UITextField 设置委托,但在下一行中,您正在创建没有任何委托的新对象;)

【讨论】:

没有改变任何东西:/【参考方案2】:

你正在从一个 nil 对象设置一个值,你必须初始化它,然后你可以设置目标委托。

【讨论】:

可能是因为你初始化了两次。 我在哪里进行了第二次初始化?我试图只保留 let textView1 = UITextView(frame: CGRect(x:24,y: 100,width: 340,height: 290)) 但它是一样的。 我建议你这样做: textView1.frame = CGRect(x:24,y: 100,width: 340,height: 290) textView1.delegate = self textView1.textColor = UIColor.black textView1.backgroundColor = UIColor(red: 0.00, green: 0.00, blue: 0.00, alpha: 0.00) textView1.text = "textView 1" view.addSubview(textView1) 哦,那么它来自我......也许是因为我有 8.2 版本。 我不这么认为@VH24【参考方案3】:

请用下一行更改textView1.delegate = self的位置。

【讨论】:

我用你的代码更改了我的代码,然后运行该应用程序。我更改了 textView1 的文本,但输出区域没有打印任何内容。这肯定很简单,但我真的被这个问题困住了。。 1) 发布实际代码,而不是图片。图片不能被引用或搜索。 2)这个答案如何改进其他已经表明需要移动textView1.delegate = self 行的先前答案?【参考方案4】:

请尝试使用此代码

导入 UIKit

类 ViewController: UIViewController, UITextViewDelegate

var textView1 = UITextView()
override func viewDidLoad() 
    super.viewDidLoad()
    textView1 = UITextView(frame: CGRect(x:24,y: 100,width: 340,height: 290))
    textView1.delegate = self

    textView1.textColor = UIColor.black
    textView1.backgroundColor = UIColor(red: 0.00, green: 0.00, blue: 0.00, alpha: 0.00)
    textView1.text = "textView 1"
    view.addSubview(textView1)


func textViewDidBeginEditing(_ textView: UITextView) 
    print("print1")


func textViewDidEndEditing(_ textView: UITextView)  
    print("print2")

【讨论】:

“请尝试”不是一个有用的描述。清楚地说明问题所在以及您的回答如何解决问题。 重新启动计算机并将 textView1.delegate = self 的位置更改为下一行后,问题解决了。 xcode 也可能存在问题,例如错误,在重新启动后解决。谢谢!

以上是关于UItextView 委托 swift - textViewDidBeginEditing 未调用的主要内容,如果未能解决你的问题,请参考以下文章

未为 UITextView 触发委托协议功能

Swift:检测用户编辑的热点已在 UITextView 中停止

UITextView 委托问题

tableHeaderView中的UITextView找不到委托

UITextView 的自定义委托

iphone设置UITextView委托打破自动完成