objective-c ios:覆盖类的实现方法

时间:2014-04-29 18:26:03

标签: ios objective-c class inheritance method-overriding

我是iOS开发的新手,并且有点担心这样的问题。

在我的iphone应用程序中,我正在使用这个真棒下拉视图控制器https://github.com/nmattisson/DropdownMenu 通过Cocoapods

我在自己的DropdownMenuController中延长MyDropdownMenuController

MyDropdownMenuController.h

#import "DropdownMenuController.h"

@interface MyDropdownMenuController : DropdownMenuController

@end

我想在我的控制器实例中覆盖这个drawOpenLayerhttps://github.com/nmattisson/DropdownMenu/blob/master/DropdownMenu/DropdownMenuController.m#L126)方法,但不幸的是编译器说它不可能:

MyDropdownMenuController.m

- (void)drawOpenLayer {
   // compiler says 
   // "No visible @interface for "DropdownMenuController" declares the selector "drawOpenLayer"
   [super drawOpenLayer];
}

是否可以在不实际更新外部接口等的情况下覆盖此方法。

1 个答案:

答案 0 :(得分:1)

您可以创建一个定义方法的类别

@interface DropdownMenuController (MichaelHacksIt)

- (void)drawOpenLayer;

@end

(无需为此定义@implementation,因为它已经实现了。)

然后你可以打电话给那个方法。

<强>声明: 顺便说一下,如果你想调用无证件的方法并且不关心苹果的批准,那就是你要走的路。在这种情况下,它没有任何问题,因为你不是在攻击Apple代码,Apple并不关心你是否破解了一些CocoaPods程序。但是,您依赖于第三方软件包的内部,因此下次更新该软件包时可能会出现问题......