0

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

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 时,关于如何在导航栏上维护这些自定义元素有什么建议吗?谢谢!

4

1 回答 1

0

您可以创建自己的导航项类,该类继承 UIButton 并设置该类中的所有外观,然后只需将导航项设置为那些自定义 UIButton。

像这样的东西:

在 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

然后在您的视图控制器中:

#import CustomButton.h

- (void)viewDidLoad
{
     CustomButton *button = [[CustomButton alloc]init];
     self.navigationItem.leftBarButton = [[UIBarButtonItem alloc] initWithCustomView:button];
}
于 2013-10-11T18:15:31.617 回答