iOS6创建iOS7风格导航导,导航条自动添加返回按钮

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
- (void)viewDidLoad
{
    [super viewDidLoad];
 
    if ([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0) {
 
        // 1、修改导航条样式
        UINavigationBar *bar = [UINavigationBar appearance];
        // 修改导航条背景
        [bar setBackgroundImage:[UIImage imageNamed:@"navigationbar_background.png"] forBarMetrics:UIBarMetricsDefault];
        // 修改导航条文字样式
        [bar setTitleTextAttributes:@{
                                      UITextAttributeTextColor : [UIColor blackColor],
                                      UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetZero]
                                      }];
 
 
        // 2、修改导航条按钮样式
        UIBarButtonItem *item = [UIBarButtonItem appearance];
 
        UIImage *normal = [UIImage imageNamed:@"navigationbar_button_background.png"];
        UIImage *highlight = [UIImage imageNamed:@"navigationbar_button_background_pushed.png"];
 
        // 修改导航条按钮背景
        [item setBackgroundImage:normal forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
        [item setBackgroundImage:highlight forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
 
        // 修改导航条按钮文字样式
        [item setTitleTextAttributes:@{
                                       UITextAttributeTextColor : kBlueColor,
                                       UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetZero],
                                       } forState:UIControlStateNormal];
        [item setTitleTextAttributes:@{
                                       UITextAttributeTextColor : kBlueColor,
                                       UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetZero]
                                       } forState:UIControlStateHighlighted];
 
        [item setBackButtonBackgroundImage:normal forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
        [item setBackButtonBackgroundImage:highlight forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
 
        // 3、修改状态栏样式
        [UIApplication sharedApplication].statusBarHidden = NO;
        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackOpaque;
 
    }
}
 
#pragma mark - 2、代理方法
#pragma mark 2.1、控制器将要视图显示
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    // 在未自定义导航条返回键的情况下,iOS6及以下版本设备导航条自动添加仿iOS7返回按钮(根控制器例外)
    if (!(viewController == navigationController.viewControllers.firstObject || [(RMBaseVCtrl *)viewController isCustomNBI]) && [viewController isKindOfClass:[RMBaseVCtrl class]]){
 
        // 栈控制器数组
        NSArray *vcs = navigationController.viewControllers;
 
        // 前一个控制器序号
        int penultimate = (int)vcs.count - 2;
 
        if (penultimate >= 0) {
 
            // 前一个控制器标题
            NSString *title = [[vcs objectAtIndex:penultimate] title];
 
            if (title == nil || title.length > 4) title = @"返回";
 
            // 返回按钮文字为前一个控制器标题、基本功能为返回上一级目录
            viewController.navigationItem.leftBarButtonItem = [UIBarButtonItem barButtonItemWithBackButtonTitle:title addTarget:self action:@selector(barButtonItemBack:)];
        }
    }
}
 
#pragma mark 2.2、控制器完成视图显示
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
//    NSLog(@"def");
}

Leave a Reply