重写swift中属于Obj-C框架类的函数
我正在使用JSQMessages构建聊天应用程序。我试图通过重写deleteBackward()函数来关闭UITextView元素中的“backspace”。我可以攻击JSQ框架核心,我想避免这种情况,我尝试了强制降级,但也没有成功。如何重写当前类(JSQMessagesViewController)树深处引用的类(UITextView)实例的函数 以下是守则的要点: 在我的ChatViewController.swift文件中重写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
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是否可以分配都不清楚。谢谢你的建议。任务是在框架内完成的,这意味着对核心进行黑客攻击。我试图避免为了一个覆盖函数而重铸几个类和文件,但这可能是唯一的出路。谢谢你的建议。任务是在框架内完成的,这意味着对核心进行黑客攻击。我试图避免为一个覆盖函数重铸几个类和文件,但这可能是唯一的出路。