重写swift中属于Obj-C框架类的函数

重写swift中属于Obj-C框架类的函数,swift,uitextview,overriding,jsqmessagesviewcontroller,downcast,Swift,Uitextview,Overriding,Jsqmessagesviewcontroller,Downcast,我正在使用JSQMessages构建聊天应用程序。我试图通过重写deleteBackward()函数来关闭UITextView元素中的“backspace”。我可以攻击JSQ框架核心,我想避免这种情况,我尝试了强制降级,但也没有成功。如何重写当前类(JSQMessagesViewController)树深处引用的类(UITextView)实例的函数 以下是守则的要点: 在我的ChatViewController.swift文件中 class ChatViewController: JSQMess

我正在使用JSQMessages构建聊天应用程序。我试图通过重写deleteBackward()函数来关闭UITextView元素中的“backspace”。我可以攻击JSQ框架核心,我想避免这种情况,我尝试了强制降级,但也没有成功。如何重写当前类(JSQMessagesViewController)树深处引用的类(UITextView)实例的函数

以下是守则的要点:

在我的ChatViewController.swift文件中

class ChatViewController: JSQMessagesViewController, UICollectionViewDataSource, UIActionSheetDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    ....

    override func viewDidLoad() {
    super.viewDidLoad()

    var user = PFUser.currentUser()
    self.senderId = user.objectId
    self.senderDisplayName = user[PF_USER_FULLNAME] as! String

    //here's the important line
    let base = self.inputToolbar.contentView.textView
    let newtexview = base as! UITextViewNB

    .....        

}
class UITextViewNB: UITextView {

    override func deleteBackward() {
        // blank because I just want to shut it off
    }
}
在我的keyboard.swift文件中

class ChatViewController: JSQMessagesViewController, UICollectionViewDataSource, UIActionSheetDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    ....

    override func viewDidLoad() {
    super.viewDidLoad()

    var user = PFUser.currentUser()
    self.senderId = user.objectId
    self.senderDisplayName = user[PF_USER_FULLNAME] as! String

    //here's the important line
    let base = self.inputToolbar.contentView.textView
    let newtexview = base as! UITextViewNB

    .....        

}
class UITextViewNB: UITextView {

    override func deleteBackward() {
        // blank because I just want to shut it off
    }
}

我显然在概念上遗漏了一些东西。

操作符的
家族实际上并没有改变底层对象的类。他们只是告诉编译器生成代码,以确保对象类已经正确,然后将对象作为新类型处理,以便将来生成代码。仅仅因为将字符串强制转换为Int,实际上并不会改变字符串的任何内容


我不熟悉您提供的框架,但您可以尝试的一件事是获取现有的textView,使新的UITextViewNB配置相同,然后删除现有的UITextView并替换为新的UITextView。别忘了将新文本视图指定给…contentView.textView。现在还不清楚这是否可行,甚至连contentView.textView是否可以分配。

操作符的
家族实际上并没有改变底层对象的类别。他们只是告诉编译器生成代码,以确保对象类已经正确,然后将对象作为新类型处理,以便将来生成代码。仅仅因为将字符串强制转换为Int,实际上并不会改变字符串的任何内容


我不熟悉您提供的框架,但您可以尝试的一件事是获取现有的textView,使新的UITextViewNB配置相同,然后删除现有的UITextView并替换为新的UITextView。别忘了将新文本视图指定给…contentView.textView。现在还不清楚这是否可行,甚至连contentView.textView是否可以分配都不清楚。

谢谢你的建议。任务是在框架内完成的,这意味着对核心进行黑客攻击。我试图避免为了一个覆盖函数而重铸几个类和文件,但这可能是唯一的出路。谢谢你的建议。任务是在框架内完成的,这意味着对核心进行黑客攻击。我试图避免为一个覆盖函数重铸几个类和文件,但这可能是唯一的出路。