我正在尝试创建UINavigationController
的可重用子类。这是我的代码:
@interface MainNavigationController : UINavigationController
...
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationBar.barTintColor = primaryOrange;
self.navigationBar.tintColor = white;
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"search"] style:UIBarButtonItemStylePlain target:self action:nil];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"menu"] style:UIBarButtonItemStylePlain target:self action:nil];
}
所以问题是导航栏的颜色发生了变化,但按钮却没有出现。
我在这里错过了什么?
更新 我希望图像中的导航 Controller 具有相同的导航 Controller (按钮和颜色...):
更新 所以我用这种方式对我的 navugationController 进行子类化:
-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"search"] style:UIBarButtonItemStylePlain target:self action:nil];
viewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"menu"] style:UIBarButtonItemStylePlain target:self action:@selector(showMainMenu)];
}
- (id)initWithRootViewController:(UIViewController *)rootViewController {
self = [super initWithRootViewController:rootViewController];
if (self) {
rootViewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"search"] style:UIBarButtonItemStylePlain target:self action:nil];
rootViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"menu"] style:UIBarButtonItemStylePlain target:self action:@selector(showMainMenu)];
}
return self;
}
这项工作有效,但唯一的问题是,当我按下 View 而不是左侧的后退按钮时,我总是得到搜索图标,如何修复它(我希望左侧有父级的搜索按钮,左侧有后退按钮) subview )?
最佳答案
子类化设计应该这样 -
- (id)initWithRootViewController:(UIViewController *)rootViewController {
self = [super initWithRootViewController:rootViewController];
if (self) {
[self setLeftButtonToController:rootViewController];
}
return self;
}
- (void)setLeftButtonToController:(UIViewController *)viewController {
UIBarButtonItem *closeItem = [[UIBarButtonItem alloc] initWithTitle:@"Close" style:UIBarButtonItemStylePlain target:self action:@selector(dismissController)];
[viewController.navigationItem setRightBarButtonItem:closeItem];
}
根据要求提供完整代码 -
//
// MyOwnNavigationController.h
//
//
#import <UIKit/UIKit.h>
@interface MyOwnNavigationController : UINavigationController
- (id)initWithRootViewController:(UIViewController *)rootViewController;
@end
//
// MyOwnNavigationController.m
//
//
#import "MyOwnNavigationController.h"
@interface MyOwnNavigationController ()
@end
@implementation MyOwnNavigationController
- (id)initWithRootViewController:(UIViewController *)rootViewController {
self = [super initWithRootViewController:rootViewController];
if (self) {
[self setLeftButtonToController:rootViewController];
}
return self;
}
- (void)setLeftButtonToController:(UIViewController *)viewController {
UIBarButtonItem *closeItem = [[UIBarButtonItem alloc] initWithTitle:@"Close" style:UIBarButtonItemStylePlain target:self action:@selector(dismissController)];
[viewController.navigationItem setRightBarButtonItem:closeItem];
}
@end
如何使用 -
TwoViewController * viewController = [[TwoViewController alloc] initWithNibName:@"TwoViewController" bundle:nil];
MyOwnNavigationController *navController = [[MyOwnNavigationController alloc] initWithRootViewController:viewController];
更新 StoryBroad ---- 将以下方法添加到 MyOwnNavigationController.m
- (void) loadView
{
UIBarButtonItem *closeItem = [[UIBarButtonItem alloc] initWithTitle:@"Close" style:UIBarButtonItemStylePlain target:self action:@selector(dismissController)];
[self.rootViewController.navigationItem setRightBarButtonItem:closeItem];
}
关于ios - 将按钮添加到 UINavigationController 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30372135/