简单问题:在我的应用程序的主视图控制器中(在导航控制器中),我正在使用以下内容自定义导航栏:
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"titleImage"]];
UIButton *menuButton = [[UIButton alloc] init];
[menuButton setImage:[UIImage imageNamed:@"menuIcon"] forState:UIControlStateNormal];
[menuButton setFrame:CGRectMake(0, 0, 34, 34)];
UIBarButtonItem *menuItem = [[UIBarButtonItem alloc] initWithCustomView:menuButton];
self.navigationItem.rightBarButtonItem = menuItem;
我希望这些元素 - 标题视图和右侧栏按钮 - 在整个应用程序中保持一致,因为我将新的视图控制器推入和关闭导航控制器。
当然,我可以在推送到我的导航堆栈的每个视图控制器的viewDidLoad
中设置我的自定义项目,但这意味着在两个视图控制器之间的动画期间,我的自定义项目是动画的而且,这不像我想的那么干净。
关于在从vc切换到vc时如何在导航栏上维护这些自定义元素的任何建议?谢谢!
答案 0 :(得分:0)
您可以创建自己的导航项类,该类是UIButton的子类并设置该类中的所有外观,然后将导航项设置为那些自定义UIButtons。
这样的事情:
在CustomButton.h中
#import <UIKit/UIKit.h>
@interface CustomButton : UIButton
@end
然后在CustomButton.m
中@implementation CustomButton
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
//Set images etc.
[menuButton setImage:[UIImage imageNamed:@"menuIcon"] forState:UIControlStateNormal];
[menuButton setFrame:CGRectMake(0, 0, 34, 34)];
}
return self;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
@end
然后在你的viewController中:
#import CustomButton.h
- (void)viewDidLoad
{
CustomButton *button = [[CustomButton alloc]init];
self.navigationItem.leftBarButton = [[UIBarButtonItem alloc] initWithCustomView:button];
}