在编写 Objective-C 类别时,我如何知道要重写哪些方法?

How Do I Know Which Methods to Override When Writing an Objective-C Category?

我想在 UINavigationItem 上写一个类别,以便在我的整个应用程序中对 barBackButtonItem 进行更改。

根据此处的评论 (),我应该 "override backBarButtonItem in it, then your method will be called whenever their back bar button item is called for." - 但我怎么知道要覆盖什么方法?我查看了 UINavigationItem 文档,有多种方法用于初始化 backBarButtonItem。如何确定我应该在我的类别中覆盖哪种方法?

您想要 UIViewControllersubclass 而不是 catagory.

例如:

@interface CustomViewController : UIViewController

@end

@implementation CustomViewController

-(void) viewDidLoad {
    [super viewDidLoad];

    self.navigationItem.backBarButtonItem.title = @"";
}

@end

现在您只需为您的视图控制器使用 CustomViewController class,它们都会应用更改。

如果您以编程方式执行此操作,那么您只需要更改视图控制器的超级class:

从这个....到这个...

如果您使用的是故事板,您需要从身份检查器中更改超级class...

如果您想覆盖 backBarButtonItem,请覆盖 backBarButtonItem。只有一种方法叫做 backBarButtonItem。 ObjC 方法由它们的名称唯一确定。

你会这样做:

@implementation UINavigationItem (MyCategory)

- (UIBarButtonItem *)backBarButtonItem
{
    return [[UIBarButtonItem alloc] initWithTitle:nil style:UIBarButtonItemStylePlain target:nil action:nil]
}

@end

我并不是说这是个好主意,但你就是这样做的。