博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UIKit 框架之Bar、Controller
阅读量:5913 次
发布时间:2019-06-19

本文共 11373 字,大约阅读时间需要 37 分钟。

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主要模拟登录注册,有时候需要先让用户登录注册之后才能进入。

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 ()
@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 ()
@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

 实现效果:

转载地址:http://npqpx.baihongyu.com/

你可能感兴趣的文章
POJ2479 Maximum sum[DP|最大子段和]
查看>>
ASP.Net MVC开发基础学习笔记(8):新建数据页面
查看>>
sql优化的几种方法
查看>>
多线程笔试
查看>>
关于DB2 MQT 增量更新,出错代码详细说明
查看>>
(Excel)常用函数公式及操作技巧之六:条件自定义格式(二)
查看>>
python Property属性用法
查看>>
android中使用startActivityForResult回传数据
查看>>
UVA 657 The die is cast
查看>>
AjaxToollit 3.5 使用整理
查看>>
ArcEngine编辑功能(一)
查看>>
代码文件查看器
查看>>
【IBM Tivoli Identity Manager 学习文档】7 TIM的Adapters简介
查看>>
如何正确预防颈椎病
查看>>
android 当屏幕截图,你如何改变屏幕内容,他们俩bitmap将合并的图像被一起显示...
查看>>
layer-list实现只有左、右和下边框的圆角矩形
查看>>
python --循环设计
查看>>
css制作上下左右的箭头
查看>>
Java---16---多线程---死锁
查看>>
Java程序员的日常 —— 工作一天的收获
查看>>