防止自定义UINavigationBar元素在视图之间切换

时间:2013-10-11 18:00:44

标签: iphone ios uinavigationcontroller ios7 uinavigationbar

简单问题:在我的应用程序的主视图控制器中(在导航控制器中),我正在使用以下内容自定义导航栏:

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时如何在导航栏上维护这些自定义元素的任何建议?谢谢!

1 个答案:

答案 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];
}