ror*_*ulu 5 iphone objective-c uinavigationbar uinavigationitem ios
我想为应用程序中的所有控制器设置自定义后退栏按钮.我试过用这个:
[[UIBarButtonItem appearance]
setBackButtonBackgroundImage:backButtonImage
forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
它设置图像.没关系.但是,我真正想做的是,我只想要一个自定义按钮用于后栏按钮,它不包含任何标题等.上面的代码可以工作,但它会添加自动标题并调整后栏按钮项的大小.我需要为应用程序中的所有控制器设置一个固定的框架,无标题后退栏按钮项.
我已经解决了.只需在UIViewController上创建一个类别,然后将其导入prefix.pch文件即可.然后编写一个方法:customViewWillAppear:并使用viewWillAppear方法调用它:
+(void)load{
Method viewWillAppear = class_getInstanceMethod(self, @selector(customViewWillAppear:));
Method customViewWillAppear = class_getInstanceMethod(self, @selector(viewWillAppear:));
method_exchangeImplementations(viewWillAppear, customViewWillAppear);
Run Code Online (Sandbox Code Playgroud)
}
将上述方法添加到该类别类.然后实现你的customViewWillAppear方法,如下所示:
-(void)customViewWillAppear:(BOOL)animated{
[self customViewWillAppear:animated];
if([self.navigationController.viewControllers indexOfObject:self] != 0 && !self.navigationItem.hidesBackButton){
UIBarButtonItem *cancelBarButton = nil;
UIButton* cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
[cancelButton addTarget:self action:@selector(popViewControllerWithAnimation) forControlEvents:UIControlEventTouchUpInside];
[cancelButton setBackgroundImage:[UIImage imageNamed:@"yourImage.png"] forState:UIControlStateNormal];
[cancelButton sizeButtonToFit];
cancelBarButton = [[UIBarButtonItem alloc] initWithCustomView:cancelButton];
NSMutableArray * leftButtons = [NSMutableArray arrayWithObject:cancelBarButton];
[leftButtons addObjectsFromArray:self.navigationItem.leftBarButtonItems];
[self.navigationItem setLeftBarButtonItem:nil];
[self.navigationItem setLeftBarButtonItems:leftButtons];
}
[self.navigationItem setHidesBackButton:YES];
}
-(void)popViewControllerWithAnimation{
[self.navigationController popViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
现在,对于代码中的每个控制器,您都有一个自定义后退按钮.这花了我很多时间来实现和弄清楚.希望它也会帮助你们.
编辑:请使用以下代码支持iOS7>后滑功能;
UIImage *image = [UIImage imageForName:@"some_image"];
navBar.backIndicatorImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
navBar.backIndicatorTransitionMaskImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
Run Code Online (Sandbox Code Playgroud)
创建基本视图控制器并添加以下代码;
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4371 次 |
| 最近记录: |