ios 开发ios开发者添加子账号控制器后为什么不显示

从tabBarController的一个item上的控制器跳转到另一个item上的控制器
来源:博客园
先从习惯性的tabBarController开始,很多应用的外框都是用这个开始的,而从tabBarController的一个item上的控制器跳转到另一个上的,往往都是直接通过点击tabBar上的不同item来切换,

借下别人的图... 但如果要求如图从item3下的某个控制器跳转到item1上的根控制器要怎么跳呢?
可以这么看流程:

这个流程的跳转其实关乎应用开发所需要的业务流程,假如你从item3跳转到item1上的控制器后,下次点击item3时,如果需要的是显示item3的根控制器时,那可以按这个跳转。
注意,要实现这些跳转,最好就是搞一个类来保存实例化后的tabBarController,方便在整个程序里面调用
如:
先回到本item3的根控制器,不显示动画

[self.navigationController popToRootViewControllerAnimated:NO];

通过你的方法获取
UITabBarController *tabCtl
然后强制切换tabBarController的选中的item为item1就可以了

tabCtl.selectedIndex = 0;

 
假如item3不需要回到根控制器,那么只需要调用
tabCtl.selectedIndex就可以了,但要确保有获取到UITabBarController如果是跳转到item1的第二个控制器,可以这样,如果该控制器未实例化,也需要实例化,否则跳转不了

1 UINavigationController *nav = (UINavigationController *)tabCtl.viewControllers[0];
2 ProjectViewController *proCtl = [[ProjectViewController alloc]init];
3 [nav pushViewController:proCtl animated:YES];

 
应用里如果用了防止tabBar双点击的代理方法时,记得调用该代理方法
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动IOS开发UI篇 导航控制器属性和基本使用
IOS开发UI篇 导航控制器属性和基本使用
IOS开发UI篇 导航控制器属性和基本使用
作者:&&发布日期: 20:01:55
Tag标签:&&&&
IOS开发UI篇—导航控制器属性和基本使用
一、导航控制器的一些属性和基本使用
1.把子控制器添加到导航控制器中的四种方法
&1.创建一个导航控制器
& & UINavigationController *nav=[[UINavigationControlleralloc]init];
2.设置导航控制器为window的根视图
& & self.window.rootViewController=
& &&YYOneViewController& *one = [[YYOneViewController& alloc] init];
& & [nav pushViewController:one animated:YES];
&1.创建一个导航控制器
& & & &UINavigationController&*nav=[[UINavigationControlleralloc]init];
&2.设置导航控制器为window的根视图
&self.window.rootViewController=
YYOneViewController& *one = [[YYOneViewController&&alloc]&init];
&[nav addChildViewController:one];
&1.创建一个导航控制器
& & & &UINavigationController&*nav=[[UINavigationControlleralloc]init];
&2.设置导航控制器为window的根视图
&self.window.rootViewController=
YYOneViewController& *one = [[YYOneViewController&&alloc]&init];
nav.viewControllers=@[one];(添加到导航控制器的栈中)
说明:nav.viewC== nav.childViewC注意该属性是只读的,因此不能像下面这样写。nav.childViewControllers = @[one];
(4)最常用的方法
&YYOneViewController *one=[[YYOneViewController alloc]init];
&UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:one];
2.当前子控制器界面导航栏的标题以及对应返回标题的设置
& & self.navigationItem.title=@"第一个界面";
& & self.navigationItem.backBarButtonItem=[[UIBarButtonItemalloc]initWithTitle:@"返回一" style:UIBarButtonItemStylePlain target:nilaction:nil];
3.给导航栏添加按钮
说明:可添加一个,也可以添加多个(数组)
&  添加导航栏左边的按钮(添加一个相机图标的按钮),会盖掉返回
&  &self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:nil action:nil];
4.界面跳转
跳转到第二个界面(当前为第三个,移除当前栈顶的控制器)&[self.navigationControllerpopViewControllerAnimated:YES];
&  移除处理栈底控制器之外的所有控制器 &[self.navigationControllerpopToRootViewControllerAnimated:YES];
  只要传入栈中的某一个控制器,就会跳转到指定控制器&[self.navigationController popToViewController:&#(UIViewController *)#& animated:&#(BOOL)#&];
二、代码示例
YYAppDelegate.m文件
01.1 //02.2 //& YYAppDelegate.m03.3 //& 01-导航控制器的使用104.4 //05.5 //& Created by apple on 14-6-4.06.6 //& Copyright (c) 2014年 itcase. All rights reserved.07.7 //08.809.9 #import "YYAppDelegate.h"10.10 #import "YYOneViewController.h"11.1112.12 @implementation YYAppDelegate13.1314.14 //应用程序启动完毕即会调用15.15 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions16.16 {17.17&&&& self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];18.18&&&& self.window.backgroundColor = [UIColor whiteColor];19.19&&&&20.20&&&&21.21&&&& //3.添加子控制器到导航控制器中22.22&&&& //第一种也是最常用的一种23.23 //&&& YYOneViewController *one=[[YYOneViewController alloc]init];24.24 //&&& UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:one];25.25&&&&26.26&&&& //1.创建一个导航控制器27.27&&&& UINavigationController *nav=[[UINavigationController alloc]init];28.28&&&& //2.设置导航控制器为window的根视图29.29&&&& self.window.rootViewController=30.30&&&&31.31&&&& //第二种32.32&&&& YYOneViewController& *one = [[YYOneViewController& alloc] init];33.33&&&& [nav pushViewController:one animated:YES];34.34&&&&35.35&&&& //第三种36.36 //&&& [nav addChildViewController:one];37.37 //&&& 第四种(添加到导航控制器的栈中)38.38 //&&& nav.viewControllers=@[one];39.39&&&&40.40&&&& // 导航控制器的栈41.41&&&& //&&& nav.viewC== nav.childViewC42.42&&&& // 注意该属性是只读的,因此不能像下面这样写43.43&&&& //&&& nav.childViewControllers = @[one];44.44&&&&45.45&&&&46.46&&&& [self.window makeKeyAndVisible];47.47&&&& return YES;48.48 }49.4950.50 @end
YYOneViewController.m文件
01.1& //02.2 //& YYOneViewController.m03.3 //& 01-导航控制器的使用104.4 //05.5 //& Created by apple on 14-6-4.06.6 //& Copyright (c) 2014年 itcase. All rights reserved.07.7 //08.809.9 #import "YYOneViewController.h"10.10 #import "YYTwoViewController.h"11.1112.12 @interface YYOneViewController ()13.13 /**14.14& 跳转到第二个界面15.15& */16.16 - (IBAction)jump2two:(id)17.1718.18 @end19.1920.20 @implementation YYOneViewController21.2122.2223.23 - (IBAction)jump2two:(id)sender {24.24&&&& //1.创建第二个子控制器25.25&&&& YYTwoViewController *two=[[YYTwoViewController alloc]init];26.26&&&&27.27&&&& //2.把子控制器添加到导航控制器中28.28&&&& //有什么办法能够拿到导航控制器?29.29&&&&& //只要当前控制器是导航控制器的子控制器,那么就可以通过该属性直接获取到当前控制器所在的导航控制器30.30&&&& [self.navigationController pushViewController:two animated:YES];31.31 }32.3233.33 -(void)viewDidLoad34.34 {35.35&&&& [super viewDidLoad];36.36&&&& //控制当前控制器对应的导航条显示的内容37.37&&&& self.navigationItem.title=@"第一个界面";38.38&&&& //修改返回按钮显示的内容39.39&&&& self.navigationItem.backBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"返回一" style:UIBarButtonItemStylePlain target:nil action:nil];40.40 }41.41 @end
&YYTwoViewController.m文件
01.1 //02.2 //& YYTwoViewController.m03.3 //& 01-导航控制器的使用104.4 //05.5 //& Created by apple on 14-6-4.06.6 //& Copyright (c) 2014年 itcase. All rights reserved.07.7 //08.809.9 #import "YYTwoViewController.h"10.10 #import "YYThreeViewController.h"11.11 @interface YYTwoViewController ()12.12 - (IBAction)jump2Three:(id)13.1314.14 @end15.1516.16 @implementation YYTwoViewController17.1718.18 //跳转到第三个子控制器19.19 - (IBAction)jump2Three:(id)sender {20.20&&&& //1.创建第三个子控制器21.21&&&& YYThreeViewController *three=[[YYThreeViewController alloc]init];22.22&&&& //2.将子控制器添加到导航控制器中23.23&&&& [self.navigationController pushViewController:three animated:YES];24.24 }25.2526.26 -(void)viewDidLoad27.27 {28.28&&&& [super viewDidLoad];29.29&&&& //给导航栏添加按钮30.30&&&& //添加导航栏左边的按钮(添加一个相机图标的按钮),会盖掉返回31.31 //&&& self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:nil action:nil];32.32&&&&33.33&&&& //为导航栏在右边添加多个按钮34.34&&&& //创建两个按钮35.35&&&& UIBarButtonItem *a=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemStop target:nil action:nil];36.36&&&& UIBarButtonItem *b=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemReply target:nil action:nil];37.37&&&& UIBarButtonItem *c=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:nil action:nil];38.38&&&& self.navigationItem.rightBarButtonItems=@[a,b,c];39.39&&&&40.40&&&& //设置对应的导航条的返回(第三个界面导航条的返回)41.41&&&& self.navigationItem.backBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStyleBordered target:nil action:nil];42.42 }43.43 @end
YYThreeViewController.m文件
01.1 //02.2 //& YYThreeViewController.m03.3 //& 01-导航控制器的使用104.4 //05.5 //& Created by apple on 14-6-4.06.6 //& Copyright (c) 2014年 itcase. All rights reserved.07.7 //08.809.9 #import "YYThreeViewController.h"10.10 #import "YYTwoViewController.h"11.1112.12 @interface YYThreeViewController ()13.13 //返回到第二个控制器页面14.14 - (IBAction)jump2two:(id)15.15 //返回到第一个控制器页面16.16 - (IBAction)jump2root:(id)17.1718.18 @end19.1920.20 @implementation YYThreeViewController21.2122.2223.23 - (IBAction)jump2two:(id)sender {24.24&&&& //跳转到第二个界面(移除当前栈顶的控制器)25.25&&&& [self.navigationController popViewControllerAnimated:YES];26.26 }27.2728.28 - (IBAction)jump2root:(id)sender {29.29&&&& //移除处理栈底控制器之外的所有控制器30.30&&&& [self.navigationController popToRootViewControllerAnimated:YES];31.31&&&&32.32&&&& // 只要传入栈中的某一个控制器,就会跳转到指定控制器33.33&&&&&&& //不能这样,没添加到导航控制器YYTwoViewController *two = [[YYTwoViewController& alloc] init];34.34&&&& //[self.navigationController popToViewController:&#(UIViewController *)#& animated:&#(BOOL)#&];35.35 }36.36 @end
实现效果:
三、导航控制器通过栈来管理子控制器
导航控制器是通过栈的形式来管理子控制器的(先进后出)
显示在导航控制器上得view永远是栈顶控制器的view
一个导航控制器只有一个导航条,也就是说所有的自控制器公用一个导航条。
在代理方法中,打印当前window下面的所有子控件,并通过xml文件来保存,代码如下。
01.// 应用程序获取焦点(代表着可以和用户交互)02.- (void)applicationDidBecomeActive:(UIApplication *)application03.{04.NSLog(@"applicationDidBecomeActive");05.&06.&07.UINavigationController *nav =& (UINavigationController *)self.window.rootViewC08.UINavigationBar *bar =& nav.navigationB09.//&&& NSLog(@"%@", NSStringFromCGRect(bar.frame));10.&11.NSString *str =& [self digView:self.window];12.[str writeToFile:@"/Users/apple/Desktop/ios6.xml" atomically:YES];13.&14.}15.&16./**17.*& 返回传入veiw的所有层级结构18.*19.*& @param view 需要获取层级结构的view20.*21.*& @return 字符串22.*/23.- (NSString *)digView:(UIView *)view24.{25.if ([view isKindOfClass:[UITableViewCell class]]) return @"";26.// 1.初始化27.NSMutableString *xml = [NSMutableString string];28.&29.// 2.标签开头30.[xml appendFormat:@"&%@ frame=\"%@\"", view.class, NSStringFromCGRect(view.frame)];31.if (!CGPointEqualToPoint(view.bounds.origin, CGPointZero)) {32.[xml appendFormat:@" bounds=\"%@\"", NSStringFromCGRect(view.bounds)];33.}34.&35.if ([view isKindOfClass:[UIScrollView class]]) {36.UIScrollView *scroll = (UIScrollView *)37.if (!UIEdgeInsetsEqualToEdgeInsets(UIEdgeInsetsZero, scroll.contentInset)) {38.[xml appendFormat:@" contentInset=\"%@\"", NSStringFromUIEdgeInsets(scroll.contentInset)];39.}40.}41.&42.// 3.判断是否要结束43.if (view.subviews.count == 0) {44.[xml appendString:@" /&"];45.return 46.} else {47.[xml appendString:@"&"];48.}49.&50.// 4.遍历所有的子控件51.for (UIView *child in view.subviews) {52.NSString *childXml = [self digView:child];53.[xml appendString:childXml];54.}55.&56.// 5.标签结尾57.[xml appendFormat:@"&/%@&", view.class];58.&59.return 60.}
注意:在ios7和以前版本中,各个控件,包括子控制器界面frame的不同。
延伸阅读:
发表评论:
馆藏&18954
TA的最新馆藏您所在的位置: &
不看后悔的:iOS开发系列--视图切换(2)
不看后悔的:iOS开发系列--视图切换(2)
Kenshin Cui's Blog
在iOS开发中视图的切换是很频繁的,独立的视图应用在实际开发过程中并不常见,除非你的应用足够简单。在iOS开发中常用的视图切换有三种,今天我们将一一介绍:UITabBarController,UINavigation,Controller模态窗口
代码方式创建导航
UINavigationController是一个导航控制器,它用来组织有层次关系的视图,在UINavigationController中 子控制器以栈的形式存储,只有在栈顶的控制器能够显示在界面中,一旦一个子控制器出栈则会被销毁。UINavigationController默认也不 会显示任何视图(这个控制器自身的UIView不会显示),它必须有一个根控制器rootViewController,而且这个根控制器不会像其他子控 制器一样被销毁。
下面简单通过几个视图模拟一下微信添加好友的功能,假设有一个导航控制器,它的根控制器为好友列表控制器 KCFriendViewController,通过它可以导航到添加QQ联系人视图KCQQContactViewController,在QQ联系人 视图又可以导航到公共账号视图KCPublicAccountViewController。
1.首先在应用代理启动后初始化一个导航控制器并设置其根控制器为KCFriendViewController
&&&&&&&&#import&&AppDelegate.h&&#import&&KCTabBarViewController.h&&#import&&KCWebChatViewController.h&&#import&&KCContactViewController.h&&&#import&&KCFriendViewController.h&&#import&&KCQQContactViewController.h&&&@interface&AppDelegate&()&&@end&&@implementation&AppDelegate&&&&&&&&&&&&&&&-&(BOOL)application:(UIApplication&*)application&didFinishLaunchingWithOptions:(NSDictionary&*)launchOptions&{&&&&&&&&&&_window=[[UIWindow&alloc]initWithFrame:[UIScreen&mainScreen].bounds];&&&&&&&&&&_window.backgroundColor&=[UIColor&colorWithRed:249/255.0&green:249/255.0&blue:249/255.0&alpha:1];&&&&&&&&&&&[[UINavigationBar&appearance]&setBarTintColor:[UIColor&colorWithRed:23/255.0&green:180/255.0&blue:237/255.0&alpha:1]];&&&&&[[UINavigationBar&appearance]&setBarStyle:UIBarStyleBlack];&&&&&&&&&&KCFriendViewController&*friendController=[[KCFriendViewController&alloc]init];&&&&&UINavigationController&*navigationController=[[UINavigationController&alloc]initWithRootViewController:friendController];&&&&&&&&&&_window.rootViewController=navigationC&&&&&&&&&&[_window&makeKeyAndVisible];&&&&&&&&&&return&YES;&}&&-&(void)applicationWillResignActive:(UIApplication&*)application&{&&&&&&&&&&&}&&-&(void)applicationDidEnterBackground:(UIApplication&*)application&{&&&&&&&&&&&}&&-&(void)applicationWillEnterForeground:(UIApplication&*)application&{&&&&&&}&&-&(void)applicationDidBecomeActive:(UIApplication&*)application&{&&&&&&}&&-&(void)applicationWillTerminate:(UIApplication&*)application&{&&&&&&}&&@end&
2.在好友列表视图控制器中设置导航栏左右按钮,并且设置点击右侧按钮导航到添加QQ联系人视图
&&&&&&&&#import&&KCFriendViewController.h&&#import&&KCQQContactViewController.h&&&@interface&KCFriendViewController&()&&@end&&@implementation&KCFriendViewController&&-&(void)viewDidLoad&{&&&&&[super&viewDidLoad];&&&&&&&&&&&&&&&NSLog(@&childViewControllers:%@&,self.navigationController.childViewControllers);&&&&&&&&&&&&&&&&&&&&NSLog(@&%i&,self.navigationController==self.parentViewController);&&&&&&&&&&&&&&&self.navigationItem.title=@&Friends&;&&&&&&&&&&self.navigationItem.leftBarButtonItem=[[UIBarButtonItem&alloc]initWithTitle:@&Edit&&style:UIBarButtonSystemItemAdd&target:nil&action:nil];&&&&&&&&&&self.navigationItem.rightBarButtonItem=[[UIBarButtonItem&alloc]initWithImage:[UIImage&imageNamed:@&ff_IconAdd.png&]&style:UIBarButtonItemStyleDone&target:self&action:@selector(addFriends)];&&&&&&&&&&&&&&&UIBarButtonItem&*backItem=self.navigationItem.backBarButtonI&&&&&backItem.title=@&Add&Friends&;&&}&&-(void)addFriends{&&&&&&&&&&KCQQContactViewController&*qqContactController=[[KCQQContactViewController&alloc]init];&&&&&[self.navigationController&pushViewController:qqContactController&animated:YES];&}&@end&
3.在QQ联系人视图右侧导航中添加一个导航到公共账号的按钮
//&//&&KCQQContactViewController.m&//&&ViewTransition&//&//&&Created&by&Kenshin&Cui&on&14-3-15.&//&&Copyright&(c)&2014年&Kenshin&Cui.&All&rights&reserved.&//&&#import&&KCQQContactViewController.h&&#import&&KCPublicAccountViewController.h&&&@interface&KCQQContactViewController&()&&@end&&@implementation&KCQQContactViewController&&-&(void)viewDidLoad&{&&&&&[super&viewDidLoad];&&&&&&&&&&//每次出栈都会销毁相应的子控制器&&&&&NSLog(@&childViewControllers:%@&,self.navigationController.childViewControllers);&&&&&&&&&&[self&setTitle:@&QQ&Contact&];&&&&&//self.title=@&QQ&contact&;&&&&&//self.navigationItem.title=@&My&QQ&;&&&&&&&&&&UIBarButtonItem&*back=[[UIBarButtonItem&alloc]initWithTitle:@&QQ&&style:UIBarButtonItemStyleDone&target:nil&action:nil];&&&&&self.navigationItem.backBarButtonItem=&&&&&&&&&&self.navigationItem.rightBarButtonItem=[[UIBarButtonItem&alloc]initWithTitle:@&Public&Account&&style:UIBarButtonItemStyleDone&target:self&action:@selector(gotoNextView)];&}&&-(void)gotoNextView{&&&&&KCPublicAccountViewController&*publicAccountController=[[KCPublicAccountViewController&alloc]init];&&&&&[self.navigationController&pushViewController:publicAccountController&&animated:YES];&}&@end&
4.在公共账号视图中在导航栏右侧设置一个按钮用于直接返回根视图
&&&&&&&&#import&&KCPublicAccountViewController.h&&&@interface&KCPublicAccountViewController&()&&@end&&@implementation&KCPublicAccountViewController&&-&(void)viewDidLoad&{&&&&&[super&viewDidLoad];&&&&&&&&&&&&&&&NSLog(@&childViewControllers:%@&,self.navigationController.childViewControllers);&&&&&&&&&&self.title=@&Public&Account&;&&&&&&&&&&self.navigationItem.rightBarButtonItem=[[UIBarButtonItem&alloc]initWithTitle:@&Add&Friends&&style:UIBarButtonItemStyleDone&target:self&action:@selector(gotoAddFriends)];&&&&&&}&&&-(void)gotoAddFriends{&&&&&&&&&&[self.navigationController&popToRootViewControllerAnimated:YES];&}&&@end&
UINavigationController默认显示一个根控制器,这个根视图必须指定(前面我们说过 UINavigationController和UITabBarController类似仅仅作为导航容器,本身并不会显示视图),通过根控制器导航到 其他下一级子视图。
在子视图中可以通过navigationController访问导航控制器,同时可以通过navigationController的childViewControllers获得当前栈中所有的子视图(注意每一个出栈的子视图都会被销毁)。
UINavigationController导航是通过上方导航栏进行的(类似的UITabBarController是通过下方 UITabBar进行导航),每个放到UINavigationController栈中的子视图都会显示一个导航栏,可以通过子控制器(包括根控制器) 的navigationItem访问这个导航栏,修改其左右两边的按钮内容。
默认情况下除了根控制器之外的其他子控制器左侧都会在导航栏左侧显示返回按钮,点击可以返回上一级视图,同时按钮标题默认为上一级视图 的标题(注意必须是通过[self
title:@&&]设置的标题,使用self.title设置则不能显示在返回按钮中)可以通过backBarButtonItem修改。下一级子视图 左侧返回按钮上的标题的显示优先级为:
导航栏返回按钮backBarButtonItem的标题(注意不能直接给backBarButtonItem的标题赋值,只能重新给 backBarButtonItem赋值)、导航栏navigationItem的标题,视图控制器标题(必须通过setTitle设置不能通 过.title属性设置)。
内容导航&第 1 页: &第 2 页: &第 3 页: &第 4 页: &第 5 页:
关于&&的更多文章
本书涵盖的为实际操作的内容,目的是让你尽可能快地操作。首先以
既然强大的Android Studio来了,有什么理由不去用呢?
讲师: 0人学习过讲师: 0人学习过讲师: 37人学习过
日-6日,GMIC 北京 2014全球移动互联网大会
日-6日,GMIC 北京 2014全球移动互联网大会
OpenGL ES 和 OpenGL 一样,是 khronos 所维护、定义
本书主要介绍了在手机上开发J2ME游戏的方法,作者在介绍了J2ME游戏开发相关知识背景的基础上,以大富翁手机游戏的设计开发为例,
Windows Phone专家
Android开发专家
51CTO旗下网站}

我要回帖

更多关于 ios 添加导航控制器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信