- 浏览: 538040 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
landerson:
明显就有要求的嘛
ANDROID轻量级JSON序列化和反序列化[转] -
jimode2013:
很不错,就是需要这个方法
多个UIViewController使用addSubView,第二个 UIViewController 不响应旋转[转] -
w11h22j33:
...
[转]NSMutableArray中的自动释放对象让我郁闷了一整天 -
w11h22j33:
UILabel* label = [[UILabel a ...
Iphone开发 -
w11h22j33:
http://mobile.51cto.com/iphone- ...
获得通讯录中联系人的所有属性[转]
在ios5中,ViewController中新添加了下面几个方法:
addChildViewController:
removeFromParentViewController
transitionFromViewController:toViewController:duration:options:animations:completion:
willMoveToParentViewController:
didMoveToParentViewController:
下面详细介绍一下addChildViewController,一个ViewController可以添加多个子ViewController,但是这些子ViewControlle要想显示出来,需要把子controller的视图添加到父视图的相应位置r,可以通过transitionFromViewController:toViewController:duration:options:animations:completion:这个方法转换显示的子视图。同时加入相应的动画。下面以一个例子来说明,最后实现的效果:
点击其中的按钮如下:
下面详细介绍一下上述效果的实现:
- 创建项目,changeViewController。
- 添加相应的viewController,MainViewController、FirstViewController、SecondViewController、ThirdViewController。如下图:
3.把MainViewController添加到window中。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
MainViewController *mainViewController=[[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
self.window.rootViewController=mainViewController;
[self.window makeKeyAndVisible];
return YES;
}
4.在MainViewController中添加三个按钮,并且连接onClickbutton方法。
5.在MainViewController中添加三个子controller
#pragma mark – View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
FirstViewController *firstViewController=[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
[self addChildViewController:firstViewController];
SecondViewController *secondViewController=[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self addChildViewController:secondViewController];
ThirdViewController *thirdViewController=[[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];
[self addChildViewController:thirdViewController];
[contentView addSubview:thirdViewController.view];
currentViewController=thirdViewController;
}
其中要把其中的一个子controller的view添加到根视图中,这样才能显示出相应的视图。
6.点击按钮,切换视图。
-(IBAction)onClickbutton:(id)sender
{
FirstViewController *firstViewController=[self.childViewControllers objectAtIndex:0];
ThirdViewController *thirdViewController=[self.childViewControllers objectAtIndex:2];
SecondViewController *secondViewController=[self.childViewControllers objectAtIndex:1];
if ((currentViewController==firstViewController&&[sender tag]==1)||(currentViewController==secondViewController&&[sender tag]==2) ||(currentViewController==thirdViewController&&[sender tag]==3) ) {
return;
}
UIViewController *oldViewController=currentViewController;
switch ([sender tag]) {
case 1:
{
NSLog(@"留言及回复");
[self transitionFromViewController:currentViewController toViewController:firstViewController duration:4 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
} completion:^(BOOL finished) {
if (finished) {
currentViewController=firstViewController;
}else{
currentViewController=oldViewController;
}
}];
}
break;
case 2:
{
NSLog(@"生日提醒");
[self transitionFromViewController:currentViewController toViewController:secondViewController duration:1 options:UIViewAnimationOptionTransitionFlipFromTop animations:^{
} completion:^(BOOL finished) {
if (finished) {
currentViewController=secondViewController;
}else{
currentViewController=oldViewController;
}
}];
}
break;
case 3:
{
NSLog(@"好友申请");
[self transitionFromViewController:currentViewController toViewController:thirdViewController duration:1 options:UIViewAnimationOptionTransitionFlipFromBottom animations:^{
} completion:^(BOOL finished) {
if (finished) {
currentViewController=thirdViewController;
}else{
currentViewController=oldViewController;
}
}];
}
break;
default:
break;
}
}
其中我把按钮设置成不同的tag了。
这时候点击按钮,就可以切换子视图了。
这样写的好处:
- 多个UIViewController之间切换可以添加动画
- 当内存警告的时候,可以把当前不是激活状态的ViewController内存释放。
- 可以把代码更好分开
项目源代码:http://easymorse-iphone.googlecode.com/svn/trunk/changeViewController/
发表评论
-
iOS App性能优化
2014-01-03 11:23 1694http://www.hrchen.com/2013/05/ ... -
iOS多线程编程Part 3/3 - GCD
2014-01-03 11:21 1649http://www.hrchen.com/2013/07/ ... -
iOS多线程编程Part 2/3 - NSOperation
2014-01-03 11:20 4545http://www.hrchen.com/2013/06/ ... -
iOS多线程编程Part 1/3 - NSThread & Run Loop
2014-01-03 11:17 7106http://www.hrchen.com/2013/06/ ... -
iOS移动网络环境调优那些事[转]
2014-01-02 17:10 2700http://xiangwangfeng.com/201 ... -
生成APNS Service证书的步骤[转]
2013-05-23 09:19 5678要进行推送服务的第一件事就是获取推送证书。它用来对你通过SS ... -
xcode 环境,多工程联编设置【转】
2013-02-28 21:59 8965http://blog.csdn.net/vienna_zj ... -
干掉你程序中的僵尸代码【转】
2012-12-22 11:05 966随着万圣节越来越流行,我感觉有必要跟大家讨论一下一个 ... -
一个文本框搞定信用卡相关信息的输入[转]
2012-12-22 11:03 1141http://beforweb.com/node/134 ... -
【转】深度技术分析“为什么ios比android流畅”
2012-09-23 19:41 1439原文 Andorid更新了一个版本又一个版本,硬 ... -
Iphone开发
2012-09-17 22:46 12071. NSClassFromString 这个方法 ... -
HowTo: Install iPhone SDK 2.0 – 3.1 for XCode 3.2[转]
2012-09-06 09:00 1224原文链接 So… you’ve installe ... -
Xcode 中设置部分文件ARC支持[转]
2012-08-03 10:57 1736ARC是什么 ARC是iOS 5推出的新功 ... -
xcode4 设置调试错误信息小结【转】
2012-07-19 14:37 1811方案1:NSZombieEnabled 先选中工程, ... -
Finding iPhone Memory Leaks: A “Leaks” Tool Tutorial【转】
2012-07-19 14:36 1267Finding iPhone Memory Lea ... -
[Cocoa]XCode的一些调试技巧【转】
2012-07-19 14:35 1207XCode 内置GDB,我们可以在命令行中使用 GDB ... -
[IPhone]如何使用Leak检查内存泄漏[转]
2012-07-19 14:34 1236简介 在IPhone程式开发中,记忆体泄漏(内存泄漏)是 ... -
获得通讯录中联系人的所有属性[转]
2012-06-21 14:04 1616获得通讯录中联系人的所有属性 ,看代码: ABAdd ... -
多个UIViewController使用addSubView,第二个 UIViewController 不响应旋转[转]
2012-06-20 23:51 16423------------------------------- ... -
shouldAutorotateToInterfaceOrientation 不触发或者不执行的问题[转]
2012-06-20 22:58 1463今天遇到一个很郁闷 ...
相关推荐
在iOS5中,UIViewController引入了一系列的新特性和改进,极大地增强了开发者处理界面和控制视图的能力。以下是对这些新特性的详细说明: 1. **Storyboards**:iOS5引入了Storyboard的概念,这是一种全新的界面设计...
在这个名为"UIViewcontoller的新方法测试_demo"的项目中,我们将探讨这些新方法,并通过实际代码示例来理解它们的用法。 首先,我们要了解`UIViewController`的一个重要更新:`childViewControllers`属性。在iOS ...
如果不在Interface Builder中使用Container View,也可以直接在代码中创建和管理子控制器。 ```swift func swapToViewController(_ newController: UIViewController) { if let currentController = ...
这通常涉及到 `-addChildViewController:`、`-removeChildViewController:` 和 `-transitionFromViewController:toViewController:duration:options:animation:completion:` 等方法的使用。 2. **视图管理**:源码...
在这个类中,你需要重写`addChildViewController:`、`removeFromParentViewController:`等方法,以添加和移除子控制器。 2. 添加子控制器:在适当的时候,例如在初始化或根据用户操作,调用`addChildViewController...
同样,也可以通过`- (void)addChildViewController:(UIViewController *)childController`添加新的ViewController并更新Tab Bar。 3. **使用Notification或Delegate**:为了在适当的时间更新Tab Bar,可以监听特定...
- 对于iOS,可以使用UIWindow或者UIViewController的addChildViewController方法叠加视图,使用UserDefaults存储用户状态。 4. 用户反馈与优化: - 收集用户反馈:通过用户测试和数据分析,了解用户对新手引导的...
- **UIStoryboardSegue**: iOS中的UIStoryboardSegue类提供了在Storyboard之间或内部进行视图控制器(UIViewController)切换的途径。通过拖拽和配置UIStoryboardSegue,可以实现简单的模态或推入视图切换。 - **...
在iOS中,实现标签式导航通常使用TabBar + NavigationController的组合。TabBar作为底部的导航栏,展示各个主要模块,而NavigationController则用于管理每个模块内部的页面堆栈。具体实现时,每个TabBarItem对应一个...
在iOS开发中,主控制器(通常指`UIViewController`或其子类)是应用程序的核心部分,它负责管理用户界面和业务逻辑。"隐式切换主控制器代码"是一个高级编程技巧,用于在运行时动态地更改应用的主视图控制器,而无需...
而在iOS中,可以使用`UISwipeGestureRecognizer`配合`UIPanGestureRecognizer`来处理手势,以及`UIViewController`的`addChildViewController`和`view addSubview:`方法来添加和管理抽屉视图。在Web开发中,我们可以...
"ContainerViewController"是一个基于Objective-C开发的项目,它主要展示了如何在iOS应用中使用容器视图控制器(Container View Controller)这一核心概念。容器视图控制器是Apple iOS SDK中的一个强大特性,它允许...
在iOS应用设计中,分页视图控制器常常用于实现多页面滑动浏览的效果,例如在很多新闻应用、社交应用或者设置界面中都能看到这种设计。XLPageViewController的出现,使得开发者能够更加轻松地构建这样的功能,并根据...
这通常通过addChildViewController和removeChildViewController等方法实现。 4. **布局与约束**:由于滑动tabbar需要在屏幕底部固定,所以项目的布局文件(可能是storyboard或xib)会包含关于tabbar位置和大小的...