覆盖swift中的一个函数,它是Obj-C框架类的一部分

时间:2015-09-16 15:50:10

标签: swift uitextview override jsqmessagesviewcontroller downcast

我正在使用JSQMessages来构建聊天应用。我试图通过覆盖deleteBackward()函数来关闭UITextView元素中的“退格”。我可以破解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

    .....        

}

在我的keyboard.swift文件中

class UITextViewNB: UITextView {

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

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

1 个答案:

答案 0 :(得分:0)

as运算符族实际上并不会更改基础对象的类。它们只是告诉编译器生成代码以确保对象类已经正确,然后将该对象视为将来代码生成的新类型。仅仅因为你将一个String转换为Int实际上并没有改变关于String的任何内容。

我不熟悉您提供的框架,但您可以尝试的一件事是获取现有的textView,使新的UITextViewNB配置相同,然后删除现有的UITextView并替换为新的。不要忘记将新的文本视图分配给.... contentView.textView。它一点也不清楚,甚至可以分配contentView.textView。