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

我如何知道在编写Objective-C类别时要覆盖哪些方法?,objective-c,iphone,overriding,objective-c-category,Objective C,Iphone,Overriding,Objective C Category,我想在UINavigationItem上编写一个类别,以便在整个应用程序中对barBackButtonItem进行更改 从这里的注释()中告诉我的内容来看,我应该“覆盖其中的BackbarButtonim,然后无论何时调用它们的Backbar按钮项,都会调用您的方法。”—但是我怎么知道要覆盖哪个方法呢?我已经查看了UINavigationItem文档,有多种方法用于初始化backBarButtonItem。如何确定应在类别中覆盖哪个方法?您想要UIViewController的子类,而不是类别

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


从这里的注释()中告诉我的内容来看,我应该“覆盖其中的BackbarButtonim,然后无论何时调用它们的Backbar按钮项,都会调用您的方法。”—但是我怎么知道要覆盖哪个方法呢?我已经查看了UINavigationItem文档,有多种方法用于初始化
backBarButtonItem
。如何确定应在类别中覆盖哪个方法?

您想要
UIViewController
子类,而不是类别

例如:

@interface CustomViewController : UIViewController

@end

@implementation CustomViewController

-(void) viewDidLoad {
    [super viewDidLoad];

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

@end
现在您只需要为视图控制器使用
CustomViewController
类,它们都将应用更改

如果以编程方式执行此操作,则只需更改视图控制器的超类:

由此。。。。对此…

如果您使用的是情节串连板,您将需要在Identity Inspector中更改超类


如果要覆盖
backbarbuttoneim
,请覆盖
backbarbuttoneim
。只有一种方法称为
backbarbuttonim
。ObjC方法由其名称唯一确定

你应该这样做:

@implementation UINavigationItem (MyCategory)

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

@end

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

你不能覆盖一个类别中的方法,你是说一个子类吗?好吧,我是这么想的,但另一篇帖子上的人似乎相信我可以覆盖一个类别中的
backbarbuttoneim
。。。如果可以,请看这里:不,他错了。试图覆盖类别中的方法将在Xcode中标记警告,并且不会给出所需的结果。您要做的是子类
UIViewController
,并在
-viewDidLoad
中设置您的
self.navigationItem.backBarButtonItem.title
为所需。好的,因此,结束点是,我必须遍历每个视图控制器并更改每个backBarButtonItem的标题,对吗?不,您只需要在子类中更改它。如果您将视图控制器的类更改为所创建的子类,则该更改将反映在您的所有视图控制器中。谢谢-我将如何使此理论适用于所有现有视图控制器?我已添加了演示如何执行此操作的屏幕截图请注意,类名和其他全局名称应以大写字母开头。不是吗这是一个正式的例子,但你当然是对的。我已经编辑了答案。