IOS 导航控制器基本使用(UINavigationController代码创建方式)
● UINavigationController的使用步骤
➢ 初始化UINavigationController
➢ 设置UIWindow的rootViewController为UINavigationController
➢ 根据具体情况,通过push方法添加对应个数的子控制器
UINavigationController的子控制器
● UINavigationController以栈的形式保存子控制器
@property(nonatomic,copy) NSArray *viewControllers;
@property(nonatomic,readonly) NSArray *childViewControllers;
● 使用push方法能将某个控制器压入栈
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
● 使用pop方法可以移除控制器
➢ 将栈顶的控制器移除
- (UIViewController *)popViewControllerAnimated:(BOOL)animated;
➢ 回到指定的子控制器
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
➢ 回到根控制器(栈底控制器)
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
修改导航栏的内容
● 导航栏的内容由栈顶控制器的navigationItem属性决定
● UINavigationItem有以下属性影响着导航栏的内容
➢ 左上角的返回按钮
@property(nonatomic,retain) UIBarButtonItem *backBarButtonItem;
➢ 中间的标题视图
@property(nonatomic,retain) UIView *titleView;
➢ 中间的标题文字
@property(nonatomic,copy) NSString *title;
➢ 左上角的视图
@property(nonatomic,retain) UIBarButtonItem *leftBarButtonItem;
➢ UIBarButtonItem *rightBarButtonItem 右上角的视图
@property(nonatomic,retain) UIBarButtonItem *rightBarButtonItem;
初级方式 1
@implementation NJAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor]; // 1.创建导航控制器
UINavigationController *nav = [[UINavigationController alloc] init];
// 2.设置导航控制器为window的根控制器
self.window.rootViewController = nav; // 创建第一个控制器并添加到导航控制器中
NJOneViewController *one = [[NJOneViewController alloc] init];
[nav pushViewController:one animated:YES]; /*
// 3.添加子控制器到导航控制器中
// 创建一些子控制器
UIViewController *vc1 = [[UIViewController alloc] init];
vc1.view.backgroundColor = [UIColor redColor]; UIViewController *vc2 = [[UIViewController alloc] init];
vc2.view.backgroundColor = [UIColor greenColor]; UIViewController *vc3 = [[UIViewController alloc] init];
vc3.view.backgroundColor = [UIColor purpleColor]; // 添加子控制器到导航控制器中
[nav pushViewController:vc1 animated:YES];
[nav pushViewController:vc2 animated:YES];
[nav pushViewController:vc3 animated:YES];
*/ [self.window makeKeyAndVisible];
return YES;
}
@interface NJOneViewController ()
/**
* 跳转到第二个控制器
*/
- (IBAction)jump2Two:(id)sender; @end @implementation NJOneViewController - (IBAction)jump2Two:(id)sender { // 1.创建第二个控制器
NJTwoViewController *two = [[NJTwoViewController alloc] init];
// 2.将第二个控制器添加到导航控制器中
// 只要当前控制器是导航控制器的子控制器,就快要通过该属性直接获取到当前控制器所在的导航控制器
[self.navigationController pushViewController:two animated:YES];
}
中级方式
@implementation NJAppDelegate // 应用程序启动完毕即会调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor]; // 1.创建导航控制器
NJOneViewController *one = [[NJOneViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:one]; // 2.设置导航控制器为window的根控制器
self.window.rootViewController = nav; // 创建第一个控制器并添加到导航控制器中
// NJOneViewController *one = [[NJOneViewController alloc] init];
// 第一种
// [nav pushViewController:one animated:YES]; // 导航控制器的栈
// nav.viewControllers; == nav.childViewControllers;
// 第二种
// [nav addChildViewController:one]; // 第三种
// nav.viewControllers = @[one]; // 注意该属性是只读的
// nav.childViewControllers = @[one]; // NSLog(@"%d - %d", nav.viewControllers.count, nav.childViewControllers.count); // 获取栈顶的控制器
// NSLog(@"%@", nav.topViewController); // 1.取出导航控制器的导航条 [self.window makeKeyAndVisible]; NSLog(@"didFinishLaunchingWithOptions");
return YES;
} // 应用程序获取焦点(代表着可以和用户交互)
- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@"applicationDidBecomeActive"); UINavigationController *nav = (UINavigationController *)self.window.rootViewController;
UINavigationBar *bar = nav.navigationBar;
// NSLog(@"%@", NSStringFromCGRect(bar.frame)); NSString *str = [self digView:self.window];
[str writeToFile:@"/Users/apple/Desktop/ios6.xml" atomically:YES]; } /**
* 返回传入veiw的所有层级结构
*
* @param view 需要获取层级结构的view
*
* @return 字符串
*/
- (NSString *)digView:(UIView *)view
{
if ([view isKindOfClass:[UITableViewCell class]]) return @"";
// 1.初始化
NSMutableString *xml = [NSMutableString string]; // 2.标签开头
[xml appendFormat:@"<%@ frame=\"%@\"", view.class, NSStringFromCGRect(view.frame)];
if (!CGPointEqualToPoint(view.bounds.origin, CGPointZero)) {
[xml appendFormat:@" bounds=\"%@\"", NSStringFromCGRect(view.bounds)];
} if ([view isKindOfClass:[UIScrollView class]]) {
UIScrollView *scroll = (UIScrollView *)view;
if (!UIEdgeInsetsEqualToEdgeInsets(UIEdgeInsetsZero, scroll.contentInset)) {
[xml appendFormat:@" contentInset=\"%@\"", NSStringFromUIEdgeInsets(scroll.contentInset)];
}
} // 3.判断是否要结束
if (view.subviews.count == ) {
[xml appendString:@" />"];
return xml;
} else {
[xml appendString:@">"];
} // 4.遍历所有的子控件
for (UIView *child in view.subviews) {
NSString *childXml = [self digView:child];
[xml appendString:childXml];
} // 5.标签结尾
[xml appendFormat:@"</%@>", view.class]; return xml;
}
/**
* 跳转到第二个控制器
*/
- (IBAction)jump2Two:(id)sender; @end @implementation NJOneViewController - (void)viewDidLoad
{
[super viewDidLoad]; // 控制当前控制器对应的导航条显示的内容
self.navigationItem.title = @"第一个控制器7788"; // 给导航条添加一个按钮
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:nil action:nil]; // self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:nil action:nil]; UIBarButtonItem *item0 =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:nil action:nil]; UIBarButtonItem *item1 =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:nil action:nil]; self.navigationItem.rightBarButtonItems = @[item0, item1]; // 修改返回按钮显示的内容
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:nil action:nil]; } - (IBAction)jump2Two:(id)sender { // 1.创建第二个控制器
NJTwoViewController *two = [[NJTwoViewController alloc] init];
// 2.将第二个控制器添加到导航控制器中
// 只要当前控制器是导航控制器的子控制器,就快要通过该属性直接获取到当前控制器所在的导航控制器
[self.navigationController pushViewController:two animated:YES];
}
IOS 导航控制器基本使用(UINavigationController代码创建方式)的更多相关文章
- 关于ios导航控制器的知识总结
关于ios导航控制器的知识总结 添加了导航控制器后: 1.一个导航控制器会有一个顶部导航栏navigationbar和一个底部工具栏toolbar,它们是导航控制器navC的属性.且导航栏默认是不隐藏 ...
- iOS开发——控制器OC篇&UINavigationController&UITabBarController详解
UINavigationController&UITabBarController详解 一:UINavigationController 控制器的属性: UINavigationControl ...
- iOS UICollectionView(转一) XIB+纯代码创建:cell,头脚视图 cell间距
之前用CollectionViewController只是皮毛,一些iOS从入门到精通的书上也是泛泛而谈.这几天好好的搞了搞苹果的开发文档上CollectionViewController的内容,亲身 ...
- 关于iOS导航控制器隐藏和显示会出现返回键失效,导航栏标题动画异常
最近做的demo bug出现了,我觉得这个bug出现得很经典所以贴出来给大家看看, bug演示就是:点击返回键失效出现如下gif图演示的内容 为啥会出现如此奇葩的bug,系统的返回键居然失效了,尴尬 ...
- iOS 导航控制器返回栈中的某一控制器
#import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...
- iOS - 导航控制器
1.导航控制器 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.bac ...
- iOS导航控制器常用函数与navigationBar常用属性
导航控制器常用函数触发时机 当视图控制器的View将要出现时触发 - (void)viewWillAppear:(BOOL)animated 当视图控制器的View已经出现时触发 - (void)vi ...
- iOS 导航控制器如何随意push和pop 想要在 A push B 后, B 在push 到 D ,然后从 D pop 到 C ,在从 C pop 的A
这里主要是对导航控制器的viewControllerss这个数组进行操作,因为push操作和pop操作都是根据这个数据去切换控制器或者在这个数组里增加控制器的,所以只要改变这个子控制器数据就能自定义切 ...
- IOS第八天(4:UITableViewController新浪微博, 代码创建布局和数据转模型)
******控制control #import "HMViewController.h" #import "HMStatus.h" #import " ...
随机推荐
- 2017-10-17 NOIP模拟赛2
a [问题描述]你是能看到第一题的 friends 呢.——hja何大爷对字符串十分有研究,于是天天出字符串题虐杀 zhx.何大爷今天为字符串定义了新的权值计算方法.一个字符串由小写字母组成,字符串的 ...
- Android OpenGLES2.0(十七)——球形天空盒VR效果实现
在3D游戏中通常都会用到天空盒,在3D引擎中也一般会存在天空盒组件,让开发者可以直接使用.那么天空盒是什么?天空盒又是如何实现的呢?本篇博客主要介绍如何在Android中利用OpenGLES绘制一个天 ...
- Objective-C对象的申请空间与初始化
对象分配空间与初始化 对象分配空间与初始化 使用Objective-C语言创建一个对象有两个步骤,你必须: 为新对象动态分配内存空间 初始化新分配的内存,并赋初值 不经过如上两步,一个对象就没有完全功 ...
- Python制作NTF传递函数工况文件和后处理文件
摘要:在平时工作中,TB车身的传递函数分析,涉及到大量重复行的工作,费时费力.在学习python基础后,希望通过代码解决这部分重复工作.基础入门级操作,但是能够解决很大一部分工作内容.日后,待pyth ...
- Scanner类、Random类、ArrayList类
先写个框架,复习内容后来添加... 先写个框架,复习内容后来添加... 先写个框架,复习内容后来添加... 先写个框架,复习内容后来添加... 先写个框架,复习内容后来添加... 先写个框架,复习内容 ...
- EIGRP-4-调整接口度量参数来影响路径选择
从EIGRP度量参数的讨论中可以看出.能够手动配置的EIGRP度量参数只有带宽和延迟. 通过使用bandwidth命令强迫EGIRP使用或不使用某条特定路径.看起来是一个很有吸引力的做法.不过这个问题 ...
- POJ1044 Date bugs
题目来源:http://poj.org/problem?id=1044 题目大意: 与众所周知的”千年虫“类似,某些计算机上存在日期记录的bug.它们的时钟有一个年份周期,每当到达最大值时,就会自动跳 ...
- 牛客练习赛41D(思维转化)
AC通道 要点 思路:题解中将所求进行转化\[max\{相似度\} = max\{M-不相似度\} = M-min\{不相似度\}\]因此转化为求某01串T与所给众S串的最小不相似度,而最终答案是选取 ...
- lintcode-dfs实现二叉树的层序遍历
class Solution { /** * @param root: The root of binary tree. * @return: Level order a list of lists ...
- Bellman_Ford算法(求一个点到任意一点的最短距离)
单源最短路问题是固定一个起点,求它到任意一点最短路的问题. 记从起点出发到顶点 i 的最短距离为d[i],则有以下等式成立 d[i]=min{d[j]+(从j到 i 的边的权值) 看代码 #inclu ...