我如何知道在编写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的标题,对吗?不,您只需要在子类中更改它。如果您将视图控制器的类更改为所创建的子类,则该更改将反映在您的所有视图控制器中。谢谢-我将如何使此理论适用于所有现有视图控制器?我已添加了演示如何执行此操作的屏幕截图请注意,类名和其他全局名称应以大写字母开头。不是吗这是一个正式的例子,但你当然是对的。我已经编辑了答案。