如何在我的类别的实现中调用被我的类Category替换的函数?

时间:2013-12-17 03:22:34

标签: ios objective-c

参见代码:

@implementation UIView (ios7)
- (void)layoutSubviews
{
    [self layoutSubviews];
    // ......
}

显然,这将导致“无限递归”。 超级也没有帮助。 我只是想在一个公共类中添加一些常见功能的代码,并且不要认为Inherit会有所帮助。 所以,他们有什么方法可以做到这一点。或者我的要求就是愚蠢。 谢谢!

++++++++++++++++++++++++++

@interface CPUIView :UIView
- (void)layoutSubviews;
@end
...


@implementation CPUIView
- (void)layoutSubviews
{
    [super layoutSubviews];
    // add some code
}
@end


@implementation UIView (CP)

+ (Class)class
{
    return NSClassFromString(@"CPUIView");
}

我认为这段代码可以帮助我解决问题,我只想重写UIView的layoutSubviews函数。因此,我的项目中的任何UIView类都将执行我想要在此函数中执行的操作。

2 个答案:

答案 0 :(得分:0)

类别意味着方法添加到类中,而不是替换它们。这就是子类的用途。你最好创建一个子类,然后你可以调用它......

[super layoutSubviews];

...如果你需要调用原始的UIView方法。

例如:

@interface ESExampleView : UIView

@end

@implementation ESExampleView

- (void)layoutSubviews{
    NSLog(@"layoutSubviews called!"); //Do whatever
    [super layoutSubviews];
}

@end

答案 1 :(得分:0)

像@eswick所说,类别用于向对象添加方法。通过声明一个与现有方法同名的方法,您实际上会覆盖旧方法。因此,您无法调用它,因为您已将其替换掉。这就是为什么如果要保留该方法的功能,则需要进行子类化。