iPhone 3.1 SDK:UIViewController类别影响所有视图控制器。

5

关于iPhone SDK的问题。

我创建了一个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时也会将它们的视图向上移动,当然,当键盘出现时,我的某些视图不需要被移动,因为键盘不会隐藏这些字段。

我对类别的理解有误吗?有人能解释一下吗?

谢谢。

2个回答

8
不,这就是类别的工作原理——如果您向一个类添加了一些方法,则所有该类的实例都可以在运行时使用所有这些更改。

-1
重点是,在您的代码文件中,当您 #import "UIViewController Shiftable.h" 时,所有 UIViewController 实例都将具有这些新方法。如果您不导入类别文件,则没有一个 UIViewController 实例将包含这些方法。
如果您只想要某些视图控制器具有这些新/修改方法,但其他视图控制器不需要,考虑子类化 UIViewController。

5
无论您是否导入带有类别定义的头文件,所有UIViewController实例都将响应自定义类别中添加的方法。导入头文件只会影响编译器关于这些方法的警告。 - Vladimir
刚刚偶然发现了我一年前的答案...哎呀!当然,你是绝对正确的! - Yang Meyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接