IOS开发-UI学习-UINavigationController(导航控制器)的使用
UINavigationController是IOS 中常用的功能,基本用法如下:
1、在AppDelegate.m中添加如下代码:
#import "AppDelegate.h"
#import "MainViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 注意:如果保留storyboard中的viewcontroller的话,就不用第16行到20行的创建window的语句 // 创建window,设置背景色
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [UIColor colorWithRed:0.638 green:0.876 blue:1.000 alpha:1.000];
// 让当前window称为主窗口
[self.window makeKeyAndVisible]; // 设置window的根视图
MainViewController *mainVC = [[MainViewController alloc]init]; // 设置导航控制器的根视图为mainviewcontroller类的实例mainVC
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:mainVC]; // 设置window的根视图为nav
self.window.rootViewController = nav; // 给导航栏着色
nav.navigationBar.barTintColor = [UIColor colorWithRed:1.000 green:0.400 blue:1.000 alpha:1.000]; // 给导航栏添加图片
[nav.navigationBar setBackgroundImage:[UIImage imageNamed:@"barimage"] forBarMetrics:UIBarMetricsDefault]; return YES;
}
注意:使用以上功能时先在Main.storyboard中删除viewcontroller,然后添加十六到二十行语句,如果不删除Main.storyboard中的viewcontroller的话,就不需要使用十六到二十行多语句来添加window。
新建MainViewController类,继承自UIViewController,然后在MainViewController.m中添加以下代码:
#import "MainViewController.h"
#import "FirstViewController.h"
@interface MainViewController () @end @implementation MainViewController - (void)viewDidLoad {
[super viewDidLoad]; // 设置标题
// self.navigationItem.title = @"微信"; // 设置按钮
UIButton *btn1 = [[UIButton alloc]initWithFrame:CGRectMake(, , , )];
btn1.backgroundColor = [UIColor redColor];
[btn1 addTarget:self action:@selector(gotofirst) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn1]; // 自定义标题(按钮、可点击)
UIButton *titlebtn = [UIButton buttonWithType:UIButtonTypeCustom];
titlebtn.frame = CGRectMake(, , , );
[titlebtn setTitle:@"我可以点击" forState: UIControlStateNormal];
[titlebtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
titlebtn.titleLabel.font = [UIFont systemFontOfSize:];
[titlebtn addTarget:self action:@selector(titlebtnAction) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.titleView = titlebtn; // 自定义左、右按键
UIBarButtonItem *leftItem = [[UIBarButtonItem alloc]initWithTitle:@"左边" style:UIBarButtonItemStylePlain target:self action:@selector(leftItemAction)]; UIBarButtonItem *rightItem = [[UIBarButtonItem alloc]initWithTitle:@"右边" style:UIBarButtonItemStylePlain target:self action:@selector(rightItemAction)]; // self.navigationItem.leftBarButtonItem = leftItem;
// self.navigationItem.rightBarButtonItem = rightItem; // 使用数组给右边添加多个按钮
self.navigationItem.rightBarButtonItems = @[leftItem,rightItem]; } -(void)rightItemAction{
NSLog(@"右边按钮被点击了");
} -(void)leftItemAction{
NSLog(@"左边按钮被点击了");
} -(void)gotofirst{
FirstViewController *firstVC = [[FirstViewController alloc]init];
[self.navigationController pushViewController:firstVC animated:YES]; }
-(void)titlebtnAction{
NSLog(@"我被点击了");
} - (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
新建FirstViewController类,然后在FirstViewController.m中添加以下代码:
#import "FirstViewController.h"
#import "MainViewController.h" @interface FirstViewController () @end @implementation FirstViewController - (void)viewDidLoad {
[super viewDidLoad]; self.view.backgroundColor = [UIColor blackColor]; // 设置按钮
UIButton *btn1 = [[UIButton alloc]initWithFrame:CGRectMake(, , , )];
btn1.backgroundColor = [UIColor redColor];
[btn1 addTarget:self action:@selector(goback) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn1];
} -(void)goback{ //按指定返回
//// 返回根视图
// [self.navigationController popToRootViewControllerAnimated:YES];
//
//// 返回上一个视图
// [self.navigationController popViewControllerAnimated:YES]; //通过循环比较返回
for (UIViewController *tmp in self.navigationController.viewControllers) {
if ([tmp isKindOfClass:[MainViewController class]]) {
[self.navigationController popToViewController:tmp animated:YES];
}
} } - (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
通过以上代码就可以实现两个viewcontroller的切换,是通过导航控制器实现的。
IOS开发-UI学习-UINavigationController(导航控制器)的使用的更多相关文章
- 【iOS开发-21】UINavigationController导航控制器初始化,导航控制器栈的push和pop跳转理解
(1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最以下,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界 ...
- IOS开发-表视图LV3导航控制器
学到这里感觉有点难了,其实这篇文章再草稿箱里放了好久了~ 最近对于学习的热情下降了.这不行-抓紧学习走起! 在这一章节的学习中主要针对导航控制器及表视图来建立多视图的应用, 首先要了解一些概念-- 1 ...
- IOS开发UI篇-NavigationController的控制器之间的跳转
一.效果图如下 1> 第一个控制器的NavigationBar隐藏 2> 有按钮,可以跳转到下一个控制器,返回上一个控制器或者根控制器 二.思路代码 思路: 1> 设置window的 ...
- iOS开发UI篇—多控制器和导航控制器简单介绍
iOS开发UI篇—多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...
- IOS开发UI篇—导航控制器属性和基本使用
IOS开发UI篇—导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) 1.创建一个导航控制器 UINavigationController ...
- iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期
iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期 一.基本过程 新建一个项目,系统默认的主控制器继承自UIViewController,把主控制器两个文件删掉. 在stor ...
- iOS开发UI篇—控制器的创建
iOS开发UI篇—控制器的创建 说明:控制器有三种创建方式,下面一一进行说明. 一.第一种创建方式(使用代码直接创建) 1.创建一个空的IOS项目. 2.为项目添加一个控制器类. 3.直接在代理方法中 ...
- iOS开发UI篇—控制器的View的创建
iOS开发UI篇—控制器的View的创建 一.6种创建控制器View的方式 #import "NJAppDelegate.h" #import "NJViewContro ...
- IOS开发之视图和视图控制器
视图(View), 视图控制器(ViewController)是IOS开发UI部分比较重要的东西.在学习视图这一块的东西的时候,感觉和Java Swing中的Panel差不多.在UIKit框架中都有一 ...
- iOS开发UI篇—UITabBarController简单介绍
iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...
随机推荐
- POJ 1523 SPF (去掉割点能形成联通块的个数)
思路:使用tarjan算法求出割点,在枚举去掉每一个割点所能形成的联通块的个数. 注意:后来我看了下别的代码,发现我的枚举割点的方式是比较蠢的方式,我们完全可以在tarjan过程中把答案求出来,引入一 ...
- sql 语句操作
插入:insert into table1(field1,field2) values(value1,value2) db.execSQL(sql) db.execSQL(sql, bindArgs) ...
- PAT (Advanced Level) 1101. Quick Sort (25)
树状数组+离散化 #include<cstdio> #include<cstring> #include<cmath> #include<map> #i ...
- linux自动化构建工具-scons指南
1.scons是linux下的自动构建工具 scons是用Python编写的,使用scons之前需确认是否已经安装了Python.(在系统的命令行中运行python -V或python --versi ...
- JAVA项目复习的一些小细节
使用javadoc完成自动文档,这一段将在后期进行介绍. 类,方法和变量的作用域. 使用修饰符public和修饰符private,对于类和方法来说并没有什么不妥的,但是变量使用public却在某些时刻 ...
- jQuery插件---轻量级的弹出窗口wBox
Box Demo wBox——轻量级的弹出窗口jQuery插件,基于jQuery1.4.2开发,主要实现弹出框的效果,并且加入了很多有趣的功能,比如可img灯箱效果,callback函数,显示隐藏层, ...
- Notice: ob_end_clean() [ref.outcontrol]: failed to delete buffer. No buffer to delete
解决方法一 @ob_end_clean(); 解决方法二 if(ob_get_contents()) ob_end_clean();
- 基础DP的一些知识总结(未完成)
DP的思路: ①DAG上的最长(短)路问题 有两种状态转移, 第一个就是从其他状态获得状态F[i],第二个就是从F[i]得到其他独立的状态,这里一定要是独立的,不然后面更新的时候会遗漏.这两种状态各有 ...
- the.book.of.gimp.pdf文字不显示
逆天了,不是中文也不显示. https://bugs.freedesktop.org/show_bug.cgi?id=70529 说要升级libfreetype,可是已经是wheezy最新了,其他不稳 ...
- strut1.X和spring整合的二种方法
第一种集成方法 原理:在Action中取得BeanFactory对象,然后通过BeanFactory获取业务逻辑对象 缺点:产生了依赖,spring的类在action中产生了依赖查找.(注意和依赖注入 ...