我希望在整个应用程序中替换UINavigationController中的后退按钮。我的要求是这个后退按钮在一个XIB中定义,如果可能的话,设置它的代码在一个地方。
我已经看到various methods将属性self.navigationItem.backBarButtonItem
设置为UIBarButtomItem,并使用自定义按钮作为视图,例如[[UIBarButtonItem alloc] initWithCustomView:myButton];
我的第一个想法是创建一个全局类别(不确定是否是这个术语,我是您可能已经猜到的Objective-C的新手),为我的所有UINavigationControllers实现'ViewDidLoad',并设置此属性。我的问题是将XIB加载到我在运行时创建的这个按钮。
有没有人建议采用一种巧妙的方式(我想这一定是常见的事情,我无法想象在我的所有屏幕中重复代码)。我考虑过创建一个UINavigationController
子类,但是我不确定这会如何影响我的ViewDidLoad的自定义实现。
任何建议都非常感谢。另外我需要定位> = iOS4(外观API仅限iOS5)。
答案 0 :(得分:4)
我更倾向于不在可能的情况下强制继承,因此您可以使用两个类别来执行此操作
@interface UIViewController (backButtonAdditions)
- (void)ps_addBackbutton;
@end
@implementation UIViewController (backButtonAdditions)
- (void)ps_addBackbutton;
{
// add back button
}
@end
@interface UINavigationController (backButtonAdditions)
- (void)ps_pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
@end
@implementation UINavigationController (backButtonAdditions)
- (void)ps_pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
{
[viewController ps_addBackbutton];
[self pushViewController:viewController animated:animated];
}
@end
现在#import
这些文件适当而不是使用
[self.navigationController pushViewController:aViewController YES];
使用
[self.navigationController ps_pushViewController:aViewController YES];
我在浏览器中自由设置了这个样式,因此您可能需要调整它
答案 1 :(得分:0)
我在当前的项目中遇到了同样的问题,我提出的解决方案是创建一个没有xib的MYBaseViewController基类,并在viewDidLoad中以编程方式(如果你想用自定义视图初始化barButtonItem,你不是能够在xib中创建无论如何)创建一个customBackButton(当然会释放它并设置为nil viewDidUnload。
这对我有用,因为这样我可以为我所有其他作为MYBaseViewController子类的viewControllers创建xib(如果你在nib中为基类创建了一个视图,你将无法为子类创建一个nib)。