普遍设置自定义后退栏按钮,没有标题

ror*_*ulu 5 iphone objective-c uinavigationbar uinavigationitem ios

我想为应用程序中的所有控制器设置自定义后退栏按钮.我试过用这个:

[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

它设置图像.没关系.但是,我真正想做的是,我只想要一个自定义按钮用于后栏按钮,它不包含任何标题等.上面的代码可以工作,但它会添加自动标题并调整后栏按钮项的大小.我需要为应用程序中的所有控制器设置一个固定的框架,无标题后退栏按钮项.

ror*_*ulu 5

我已经解决了.只需在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)