Corona中文站

强大、易学的跨平台(iOS/Android)开发框架。QQ群1:74390406(满) 群2:221929599

导航

如何自定义view controller及动态切换view [复制链接]
构造、添加View并在View之间切换是IPhone开发最常见的问题。一般来说,要构造一个View需要以下几个步骤:

1.
添加新的Controller类型。具体方法是File–>New File–>Cocoa Touch Class–>UIViewController subclass。

2.
添加xib文件。具体方法是File–>New File–>User Interface–>View Xib 。

3.
在新的xib文件中制定需要使用的Controller。具体方法是用IBuilder打开对应的xib文件,选择File’s Owner,将其Class Identity –> Class 属性改成对应Controller。而后,将File’s Owner的”view” Outlet连接到View对象(按住Command,将File’s Owner)拖到View上,放开,选”view”。

4.
如果需要重载UIView class,将View的Class对应地修改。
切换View分两种,第一是在启动地时候选择一个View。这需要修改AppDelegate头文件和m文件。首先,要修改MainWindow.xib。首先要把要显示地View的一个实例添加到xib中。将Library 中一个View Controller 添加到MainWindow.xib中(放到File’s Owner边上)。而后把其控制器改为你要选用的View Controller subclass。这样,在启动时,程序自动加载MainWindow.xib的同时,也就加载了你定义的这个View。如果我们需要在delegate里头操作这个Controller的话,就需要在Delegate类中添加一个Outlet,并把View Instance连接到这个Outlet。而真正显示这个View,必须在delegate中做以下连接:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[window addSubview:switchViewController.view]; // Key Point!
[window makeKeyAndVisible];

return YES;
}
而如果要动态加载和切换View,则注意以下几个函数:
if(self.yellowViewController == nil){
YellowViewController *yellowController =
[[YellowViewController alloc]
initWithNibName:@"YellowView" bundle:nil];
self.yellowViewController = yellowController;
[yellowController release];
}
if (self.blueViewController.view.superview == nil) {
[yellowViewController.view removeFromSuperview];
[self.view insertSubview:blueViewController.view atIndex:0];
}else {
[blueViewController.view removeFromSuperview];
[self.view insertSubview:yellowViewController.view atIndex:0];
}
一个最复杂的动画切换,目前就给个例子:
[UIView beginAnimations:@"View Flip"
context:nil];
[UIView setAnimationDuration:1.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
if (self.blueViewController.view.superview == nil) {
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight
forView:self.view cache:YES];
[yellowViewController viewWillDisappear:YES];
[blueViewController viewWillAppear:YES];
[yellowViewController.view removeFromSuperview];
[self.view insertSubview:blueViewController.view atIndex:0];
[yellowViewController viewDidDisappear:YES];
[blueViewController viewDidAppear:YES];
}else {
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight
forView:self.view cache:YES];
[yellowViewController viewWillAppear:YES];
[blueViewController viewWillDisappear:YES];
[blueViewController.view removeFromSuperview];
[self.view insertSubview:yellowViewController.view atIndex:0];
[yellowViewController viewDidAppear:YES];
[blueViewController viewDidDisappear:YES];
}
[UIView commitAnimations];

特别需要注意,今天尝试实现Tab Controller,一旦需要加载Outlet的时候就收到SIGABRT。问题何在?下面详细写写如何使用Tab Controller。
第一步,建立一个新的Tab Bar Application。如果不准备使用Tab Bar Application而是用Window Based的话,需要用上面方法添加一个UITabBarController作为Root View。二者效果相同,推荐直接用Tab Bar Application。
第二步,添加新的View到Tab Bar。这里有一些trick。基本上,建立xib,controller,连接等都相同,要加入Tab Bar,首先选取Tab Bar对象,在Attribute Inspector里头,添加足够数量的View Controllers,一个Controller对应一个tab。而后在界面点选每一个Tab,选择其Nib Name,并在 Identity Inspector里头选正确的Controller!!! 这步及其重要,否则添加任何Outlet都会产生SIGABRT。
<< objective-c实现回调函数的几种方法UITableView中显示单选效果 >>

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最近发表

Powered By Z-Blog 1.8 Walle Build 100427 Copyright 2011-2015 BuildApp.Net. All Rights Reserved.