2010-05-25 50 views
5

iPhone SDK问题。iPhone 3.1 SDK:UIViewController类别正在影响所有ViewControllers

我创建了一个UIViewController类别,当UITextFields被编辑并且键盘出现时将视图向上移动,从而阻止字段。我在网上找到了这些代码,毫无疑问,你的iPhone大师们很熟悉它。界面看起来像这样:

@interface UIViewController (Shiftable) 

     - (IBAction) textFieldDidBeginEditing:(UITextField *)textField; 

     - (IBAction) textFieldDidEndEditing:(UITextField *)textField; 

     - (void) animateTextField: (UITextField *)textField up:(BOOL)up; 

@end 

我的问题是这个 - 我的每个UIViewControllers都受这个类别的影响!我以为这只会影响导入类别UIViewControllers如下:

#import "UIViewController Shiftable.h" 

但即使这样,也不该类别进口UIViewControllers有自己的看法上移时UITextFields进行编辑,当然还有我的一些观点并不需要当键盘出现时,由于键盘不隐藏字段而被移位。

我对类别的理解是否正确?任何人都可以对此有所了解吗?

谢谢。

回答

8

不,这是类别的工作方式 - 如果您将某些方法添加到类中,则所有这些更改都将在运行时用于该类的所有实例。

-1

重要的一点是,在文件你在哪里#import "UIViewController Shiftable.h",UIViewController的所有实例都会有新的方法。如果你不要导入你的类别文件,没有你的UIViewControllers会。

如果您需要一些视图控制器来拥有这些新的/已修改的方法,但其他视图控制器没有,请考虑继承UIViewController。

+5

所有UIViewController实例都将响应自定义类别中添加的方法,无论您是否使用类别定义导入标题。导入标题只会影响有关这些方法的编译器警告。 – Vladimir 2010-05-25 12:06:18

+0

刚从一年前我偶然发现了答案......哎呀! - 当然你绝对是对的! – 2011-07-19 15:14:57