Tôi đã giải quyết. Chỉ cần tạo một danh mục trên UIViewController và nhập nó vào tệp prefix.pch. Sau đó viết một phương pháp: customViewWillAppear: và sự gian lận nó với phương pháp viewWillAppear:
+(void)load{
Method viewWillAppear = class_getInstanceMethod(self, @selector(customViewWillAppear:));
Method customViewWillAppear = class_getInstanceMethod(self, @selector(viewWillAppear:));
method_exchangeImplementations(viewWillAppear, customViewWillAppear);
}
Thêm các phương pháp trên cho danh mục lớp. Sau đó, triển khai phương thức customViewWillAppear của bạn như sau:
-(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];
}
Bây giờ, đối với mọi bộ điều khiển trong mã của bạn, bạn có nút quay lại tùy chỉnh. Điều này đã cho tôi rất nhiều thời gian để thực hiện và tìm ra. Hy vọng nó cũng sẽ giúp các bạn.
EDIT: Vui lòng sử dụng mã sau để hỗ trợ iOS7> tính năng vuốt ngược;
UIImage *image = [UIImage imageForName:@"some_image"];
navBar.backIndicatorImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
navBar.backIndicatorTransitionMaskImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
Tạo bộ điều khiển chế độ xem cơ sở và thêm mã sau;
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
}
bạn đã thử barBtn.title = @ ""; ??? – Suryakant
Làm như vậy sẽ ẩn toàn bộ nút. –
Nếu bạn đặt kiểu là BarButtonItem, bạn sẽ không nhận được nút quay lại tùy chỉnh. Tôi nên thêm UIButton tùy chỉnh. – Subrat