当您在一个文件实行一类一类,将这个类的所有实例是默认的类别?
我是新来的Objective-C,我试图让我不可编辑的UITextView不可选择。 我使用类别遇到了这样的回答: https://stackoverflow.com/a/8013538/1533240
它具有以下解决方案:
@implementation UITextView (DisableCopyPaste)
-(BOOL) canBecomeFirstResponder
{
return NO;
}
@end
我加了段我的代码,但它似乎并没有工作在我仍然可以选择文本。 我对申报UITextView
是通常的:
titleLabel = [[UITextView alloc] initWithFrame:frame];
我试图改变声明[DisableCopyPaste alloc]
但是这似乎并没有工作..哈哈。
谢谢!
你误会类别的点。 分类方法添加到现有类。 它们绝不能用于覆盖现有的方法。 这样做是不确定的行为(在技术上只有在一种情况下不确定的,但是你无法预测的情况下,所以你必须假定它适用)。
如果你需要覆盖的方法,你必须继承,而不是使用类别。 见上面的答案给你链接的问题。
当您在一个文件实行一类一类,将这个类的所有实例是默认的类别?
是。 如果您创建一个类别, 该类别中的方法添加到类 。 例如,如果您创建的NSString类别返回一个字符串的校验和,您可以使用的NSString的任何实例方法。
我加了段我的代码,但它似乎并没有工作在我仍然可以选择文本。
不要使用类别来覆写现存方法。
一方面,这是不好的形式。 你有效地改变了笔者没有想到的方式类的行为。 另一件事,你不能在覆盖算工作-在哪些类别添加到类别的顺序没有规定,所以你永远不知道,如果其他一些类别可能一起去并更换您尝试更换方法。 它只是不可靠的。 如果你需要覆盖的方法,创建一个子类来代替。
你需要做的是要申报category
在头.h
文件:
如:
@interface UITextView (DisableCopyPaste)
-(BOOL) methodName
@end
然后在.m
定义为
@implementation UITextView (DisableCopyPaste)
-(BOOL) methodName
{
return NO;
}
@end
你可以做两两件事,
- 您可以在一个类中写和导入的所有类需要此功能。
- 或者写这几行eachs
.h
和.m
(分别)你需要它。