Kir*_*Koa 9 iphone objective-c ios objective-c-category
在文件中实现类的类别时,默认情况下该类的所有实例都属于该类别吗?
我是Objective-C的新手,我试图使我的不可编辑的UITextView不可选.我使用以下类别找到了这个答案:https: //stackoverflow.com/a/8013538/1533240
其中有以下解决方案:
@implementation UITextView (DisableCopyPaste)
-(BOOL) canBecomeFirstResponder
{
return NO;
}
@end
Run Code Online (Sandbox Code Playgroud)
我将代码段添加到我的代码中,但它似乎没有起作用,我仍然可以选择文本.我的声明UITextView是通常的:
titleLabel = [[UITextView alloc] initWithFrame:frame];
我试着改变声明,[DisableCopyPaste alloc]但似乎没有用......哈哈.
谢谢!
Rob*_*ier 20
你误解了类别的重点.类别将方法添加到现有类.它们绝不能用于覆盖现有方法.这样做是未定义的行为(技术上只在一种情况下未定义,但您无法预测这种情况,因此您必须假设它适用).
如果需要覆盖方法,则必须是子类,而不是使用类别.查看您链接的问题的最佳答案.
在文件中实现类的类别时,默认情况下该类的所有实例都属于该类别吗?
是.如果创建类别,则该类别中的方法将添加到类中.例如,如果在NSString上创建一个返回字符串校验和的类别,则可以在NSString的任何实例上使用该方法.
我将代码段添加到我的代码中,但它似乎没有起作用,我仍然可以选择文本.
不要使用类别来覆盖现有方法.
首先,它是糟糕的形式.您正在以作者没想到的方式有效地改变类的行为.另一方面,你不能指望覆盖工作 - 没有定义类别添加到类的顺序,所以你永远不知道是否可能出现其他类别并替换你试图替换的方法.它根本不可靠.如果需要覆盖方法,请改为创建子类.
| 归档时间: |
|
| 查看次数: |
3633 次 |
| 最近记录: |