使用按钮自定义UINavigationController

时间:2012-06-19 22:10:33

标签: iphone ios uinavigationcontroller

我希望NavigationBar的行为相同但想改变它的外观。我在网上找到了很多这样做的方法,但我不确定哪一个是iOS 5.0的最佳结果。导航栏将如下所示:

enter image description here

2 个答案:

答案 0 :(得分:3)

由于您的目标是iOS 5,我肯定会使用customizing UINavigationBarAppearance proxy。然后,您可以轻松设置自己的图像,它们将应用于应用程序中的所有导航栏,而无需子类化。

您还可以通过customizing UIBarButtonItem自定义导航栏中的按钮。后退按钮有backButtonBackgroundImageForState:barMetrics:的方法,其他按钮有backgroundImageForState:barMetrics:

答案 1 :(得分:1)

我也一直在寻找这个东西,没有找到一个简单的解决方案!感谢我的朋友和示例代码,我们使用自定义导航栏类​​创建了它,可以将其导入到任何视图控制器类中。

.h文件:

#import <UIKit/UIKit.h>

@interface NATitleBar : UIView {
    NSInteger tag;
}
@property ( nonatomic) IBOutlet UIImageView *imageView;
@property ( nonatomic) IBOutlet UILabel *label;
@property ( nonatomic) IBOutlet UIButton *back;
@property ( nonatomic) IBOutlet UIButton *home;

/**
 * Supports UIButton-style adding targets
 */

@end

.m文件:

#import "NATitleBar.h"

@implementation NATitleBar
@synthesize imageView;
@synthesize label;
@synthesize back;
@synthesize home;

- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];

if (self) {
    NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"NATitleBar" owner:self options:nil];
    [self addSubview:[views objectAtIndex:0]];

    // customize the view a bit
    //self.imageView.layer.borderWidth = 1.0;
    //self.imageView.layer.borderColor = [UIColor colorWithWhite:0.4 alpha:0.4].CGColor;
    //self.imageView.clipsToBounds = YES;
    //self.imageView.layer.cornerRadius = 5.0;
}


return self;
}


#pragma mark - Overriden Setters / Getters

- (void)setTag:(NSInteger)aTag {
self.back.tag = aTag;
}

- (NSInteger)tag {
return self.back.tag;
}

@end

然后对于Nib文件,我们有以下内容:

enter image description here

您可以在Nib文件中添加或删除图像,以便根据需要创建GUI。

现在您必须将类导入到您希望使用自定义导航控制器的任何视图控制器中,并且还要在.h中定义两个方法(如果您不想要“主页”按钮,则定义一个方法:

- (void) back;
.m中的

- (void)back {
    [self.navigationController popViewControllerAnimated:YES];
}