UIKit 框架之Bar、Controller

UIKit框架中有各种Bar,UITabBar、UINavigationBar、UIToolbar。Bar对应的就有一些Item,tabBarItem、navigationItem、toolbarItems,再加上UIViewController、UINavigationController、UITabBarController很容易搞糊涂。我看了好久,没看明白。动手敲了下才有一点感觉。

一、联系

一个UINavigationController对应着一个UINavigationBar、UIToolbar,UIToolbar默认不显示,toolbarHidden=NO时显示。一个UITabBarController对应着一个UITabBar.一个UIViewController对应着一个tabBarItem、navigationItem和多个toolbarItems。navigationItem中可以设置左右按钮和中间视图等。

二、代码demo

1.首先代码结构 viewController1-viewController5用于生成5个tabBarItem。viewController、viewController6主要模拟登录注册,有时候需要先让用户登录注册之后才能进入。

UIKit 框架之Bar、Controller

2.代码

1.在AppDelegate.m中

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    tabBarViewController *tabVc=[[tabBarViewController alloc]init];

    [self.window makeKeyAndVisible];

    self.window.backgroundColor=[UIColor whiteColor];

    self.window.rootViewController=tabVc;

    return YES;

}

 2.ViewController.m

//

//  ViewController.m

//  UITabBarController

//

//  Created by City--Online on 15/5/26.

//  Copyright (c) 2015年 XQB. All rights reserved.

//



#import "ViewController.h"

#import "ViewController6.h"



@interface ViewController ()



@end

@implementation ViewController



- (void)viewDidLoad {

    [super viewDidLoad];

    NSLog(@"%@ %@",NSStringFromCGRect(self.tabBarController.tabBar.frame),NSStringFromCGRect(self.navigationController.toolbar.frame));

    UIButton *btn=[UIButton buttonWithType:UIButtonTypeSystem];

    btn.frame=CGRectMake(100, 100, 100, 100);

    [btn setTitle:@"按钮" forState:UIControlStateNormal];

    [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:btn];

    UIBarButtonItem *item1=[[UIBarButtonItem alloc]initWithBarButtonSystemItem: UIBarButtonSystemItemDone target:self action:nil];

    self.toolbarItems=@[item1];

}

-(void)btnClick:(id)sender

{

    ViewController6 *vc6=[[ViewController6 alloc]init];

    vc6.title=@"第6页";

    vc6.hidesBottomBarWhenPushed=YES;

    [self.navigationController pushViewController:vc6 animated:YES];

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

@end

 3.ViewController1.m

//

//  ViewController1.m

//  UITabBarController

//

//  Created by City--Online on 15/5/26.

//  Copyright (c) 2015年 XQB. All rights reserved.

//



#import "ViewController1.h"

#import "ViewController2.h"



@interface ViewController1 ()



@end



@implementation ViewController1



- (void)viewDidLoad {

    [super viewDidLoad];

  

    

}



- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

@end

 4.ViewController2.m

//

//  ViewController2.m

//  UITabBarController

//

//  Created by City--Online on 15/5/26.

//  Copyright (c) 2015年 XQB. All rights reserved.

//



#import "ViewController2.h"

#import "ViewController.h"

#import "navigationViewController.h"



@interface ViewController2 ()



@end



@implementation ViewController2



- (void)viewDidLoad {

    [super viewDidLoad];

    ViewController *vc=[[ViewController alloc]init];

//    navigationViewController *nav=[[navigationViewController alloc]initWithRootViewController:vc];

//    self.navigationController.toolbarHidden=NO;

//    nav.toolbarHidden=NO;

    [self.navigationController addChildViewController:vc];

    



}





- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}



@end

 5.ViewController6.m

//

//  ViewController6.m

//  UITabBarController

//

//  Created by City--Online on 15/5/26.

//  Copyright (c) 2015年 XQB. All rights reserved.

//



#import "ViewController6.h"



@interface ViewController6 ()



@end



@implementation ViewController6



- (void)viewDidLoad {

    [super viewDidLoad];

    NSLog(@"%@ %@",NSStringFromCGRect(self.tabBarController.tabBar.frame),NSStringFromCGRect(self.navigationController.toolbar.frame));

    UIBarButtonItem *item1=[[UIBarButtonItem alloc]initWithBarButtonSystemItem: UIBarButtonSystemItemAdd target:self action:@selector(btnClick:)];

    self.toolbarItems=@[item1];

}

-(void)btnClick:(id)sender

{

    [self.navigationController popToRootViewControllerAnimated:YES];

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}



@end

 6.tabBarViewController.m继承UITabBarController

//

//  tabBarViewController.m

//  UITabBarController

//

//  Created by City--Online on 15/5/26.

//  Copyright (c) 2015年 XQB. All rights reserved.

//



#import "tabBarViewController.h"

#import "ViewController.h"

#import "ViewController1.h"

#import "ViewController2.h"

#import "ViewController3.h"

#import "ViewController4.h"

#import "ViewController5.h"

#import "navigationViewController.h"



@interface tabBarViewController ()<UITabBarControllerDelegate>



@end



@implementation tabBarViewController



- (void)viewDidLoad {

    [super viewDidLoad];

    [self steup];

    self.delegate=self;

    self.selectedIndex=2;

    self.moreNavigationController.tabBarItem=[[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemRecents tag:1001];

    self.moreNavigationController.navigationItem.rightBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"编辑" style:UIBarButtonItemStyleDone target:self action:nil];

    self.moreNavigationController.visibleViewController.navigationItem.title=@"更多功能";

    self.moreNavigationController.visibleViewController.navigationItem.rightBarButtonItem.title=@"编辑";



}

-(void)rightClick:(id)sender

{

    

}

-(void)steup

{

    ViewController *vc=[[ViewController alloc]init];

    vc.title=@"第0页";

    navigationViewController *nvc=[[navigationViewController alloc]initWithRootViewController:vc];

    nvc.toolbarHidden=NO;

    UITabBarItem *tabBarItem=[[UITabBarItem alloc]initWithTitle:@"第0页" image:[UIImage imageNamed:@"tabbar_homepage_normal"] selectedImage:[UIImage imageNamed:@"tabbar_homepage_selected"]];

    tabBarItem.badgeValue=@"2";

    nvc.tabBarItem=tabBarItem;

    

    ViewController1 *vc1=[[ViewController1 alloc]init];

    vc1.title=@"第1页";

    navigationViewController *nvc1=[[navigationViewController alloc]initWithRootViewController:vc1];

    nvc1.tabBarItem=[[UITabBarItem alloc]initWithTitle:@"第1页" image:[UIImage imageNamed:@"tabbar_convenience_normal"] selectedImage:[UIImage imageNamed:@"tabbar_convenience_selected"]];

    

    ViewController2 *vc2=[[ViewController2 alloc]init];

    vc2.title=@"第2页";

    

    navigationViewController *nvc2=[[navigationViewController alloc]initWithRootViewController:vc2];

    nvc2.toolbarHidden=NO;

    nvc2.tabBarItem=[[UITabBarItem alloc]initWithTitle:@"第2页" image:[UIImage imageNamed:@"tabbar_electrice_commerce_normal"] selectedImage:[UIImage imageNamed:@"tabbar_electrice_commerce_selected"]];

    

    

    ViewController3 *vc3=[[ViewController3 alloc]init];

    vc3.title=@"第3页";

    navigationViewController *nvc3=[[navigationViewController alloc]initWithRootViewController:vc3];

    vc3.tabBarItem=[[UITabBarItem alloc]initWithTitle:@"第3页" image:[UIImage imageNamed:@"tabbar_me_normal"] selectedImage:[UIImage imageNamed:@"tabbar_me_selected"]];

    

    ViewController4 *vc4=[[ViewController4 alloc]init];

    vc4.title=@"第4页";

    navigationViewController *nvc4=[[navigationViewController alloc]initWithRootViewController:vc4];

     nvc4.tabBarItem=[[UITabBarItem alloc]initWithTitle:@"第4页" image:[UIImage imageNamed:@"tabbar_convenience_normal"] selectedImage:[UIImage imageNamed:@"tabbar_convenience_selected"]];

    

    ViewController5 *vc5=[[ViewController5 alloc]init];

    vc5.title=@"第5页";

    navigationViewController *nvc5=[[navigationViewController alloc]initWithRootViewController:vc5];

     nvc5.tabBarItem=[[UITabBarItem alloc]initWithTitle:@"第5页" image:[UIImage imageNamed:@"tabbar_homepage_normal"] selectedImage:[UIImage imageNamed:@"tabbar_homepage_selected"]];

    // 默认的顺序

     NSArray *defaultarr=@[nvc,nvc1,nvc2,nvc3,nvc4,nvc5];

    // 自定义的顺序

     NSMutableArray *newarr=[[NSMutableArray alloc]init];

    //获取保存的title数组

    NSArray *titles=[[NSUserDefaults standardUserDefaults] arrayForKey:@"vcs"];

    // 第一次启动为nil

    if (titles==nil) {

        newarr=[defaultarr copy];

    }

    //根据自定义title数组 设置newarr数组

    for (NSString *s in titles) {

        for (navigationViewController *nvc in defaultarr) {

            if ([s isEqualToString:nvc.visibleViewController.title]) {

                [newarr addObject:nvc];

            }

        }

    }

    self.viewControllers=newarr;

    

    

}

//UITabBarControllerDelegate

//是否可以选中

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController

{

    return YES;

}

//选中某个viewController

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

{

//    NSLog(@"%@",viewController.title);

}

//开始自定义viewControllers

- (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers

{

    NSLog(@"%@",viewControllers);

}

//即将编辑结束

- (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed

{

    NSLog(@"%d",changed);

}

//编辑结束

- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed

{

    //记下选择的选项顺序,方便下次启动时显示

    NSMutableArray *arr=[[NSMutableArray alloc]init];

    if (!changed) {

        return;

    }

    for (UIViewController *vc in viewControllers) {

        [arr addObject:vc.title];

    }

    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];

    [defaults setObject:arr forKey:@"vcs"];

   

}



- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}



/*

#pragma mark - Navigation



// In a storyboard-based application, you will often want to do a little preparation before navigation

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    // Get the new view controller using [segue destinationViewController].

    // Pass the selected object to the new view controller.

}

*/



@end

 7.navigationViewController.m

//

//  navigationViewController.m

//  UITabBarController

//

//  Created by City--Online on 15/5/26.

//  Copyright (c) 2015年 XQB. All rights reserved.

//



#import "navigationViewController.h"



@interface navigationViewController ()<UINavigationControllerDelegate>



@end



@implementation navigationViewController



- (void)viewDidLoad {

    [super viewDidLoad];

//    if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])

//    {

//        self.edgesForExtendedLayout = UIRectEdgeNone;

//    }

    self.navigationController.navigationBar.translucent=NO;

    self.delegate=self;

    

}

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

{

    NSLog(@"%@",viewController.title);

}

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated

{

}



- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}



/*

#pragma mark - Navigation



// In a storyboard-based application, you will often want to do a little preparation before navigation

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    // Get the new view controller using [segue destinationViewController].

    // Pass the selected object to the new view controller.

}

*/



@end

 实现效果:

UIKit 框架之Bar、ControllerUIKit 框架之Bar、ControllerUIKit 框架之Bar、ControllerUIKit 框架之Bar、Controller

你可能感兴趣的:(controller)