今天看了一下iOS开发中多个视图的应用. iOS下包含了几种不同种类的视图类型和controller:比如Tab Bar ,Navigation Bar ,Tool Bar等.也可以自定义自己的视图的controller 程序中主窗口的视图控制器我们成为root controller,由它负责不同视图的切换等功能. 由root controller负责的视图都有自己的controller和delegate,比如一个tab bar,当用户在tab bar上点击的时候,是由tab bar的controller负责处理,而当用户在内容界面点击的时候,是由内容视图的controller负责处理的. 书中的例子很简单,点击tab bar中的按扭,在两个背景颜色(一蓝一黄)的视图中切换,两个视图中各有一个button 书中的例子建立的步骤如下: 1.建立一个Window base application ,没有view controller,只有一个window 2.添加视图文件 2.1 新建文件,选择cocoa touch下的UIViewController subclass 不使用xib文件(书中这里是xcode4.2以前的版本) 保存为SwitchViewController.h 和 SwitchViewController.m.这就是root controller 2.2 按照步骤2.1,创建蓝,黄背景视图的类文件 BlueViewController & YellowViewController 3.添加xib文件 3.1 选择cocoa touch下user interface下的View XIB的文件 3.2 新建两个视图的xib文件,BlueView.xib & YellowView.xib 4.在AppDelegate中添加一个IBOutlet, @property (nonatomic, retain) IBOutlet SwitchViewController *switchViewController; 5.为了将主视图SwitchViewController和Window关联,需要使用addSubview,添加了以下代码: #import "View_SwitcherAppDelegate.h" 6. 为了切换两个view,我们在SwitchViewController里添加两个View的指针,不定义IBOutlet,同时定义方法switchViews #import <UIKit/UIKit.h>
7.代码架构好了,开始在IB中操作 7.1 在Library中拖动一个View Controller到Window上面 7.2 该View是UIViewController,在Identity Inspector中修改类名为UIViewController 7.3 新建Toolbar的View,拖放一个View到7.1添加的View上面,替换原有的View(注:为何是替换呢?) 7.4 拖动一个Toolbar到7.3新建的View中,选中Toolbar后,点击Button,链接到SwitchViewController的方法switchView中
8. 在IB中将AppDelegate中的IBOutlet switchViewController与类SwitchViewController链接 9. 修改SwitchViewController.m 主要就是从Nib加载ViewController,不用的释放Controller 刚开始只加载BlueView,因为YellowView可能用户不会选择,等到切换的时候才加载(Lazy Loading) #import "SwitchViewController.h" [yellowController release]; - (void)didReceiveMemoryWarning {
- (void)dealloc {
10.完善两个内容视图,添加button,弹出不同的内容提示. #import <UIKit/UIKit.h> 在实现中加入UIAlertView即可.(略去)
打开BlueView.nib,在Indentity Inspector中选择class name为BlueViewController,表明从nib从BlueViewController 然后修改View的背景色,更改View的位置在属性页的 Simulated User Interface Elements选项下
11.加入视图切换动画 - (IBAction)switchViews:(id)sender .....
if(..) { [UIView setAnimationTransition: … … } [UIView commitAnimations]; }
昨天参照书中的例子,回到家后开始实现示例中的代码. 发现XCode4.2中没有Window Base Application这一选项.使用Empty Application没有主界面的Storyboard文件. 于是打开google,发现Jeroen Trappers有一篇文章有详细的解决方法. 地址:http://www.trappers.tk/site/2011/06/16/mainwindow-xib/
我的看法是(不一定准确):AppDelegate是个代理类,起类似与window编程下的WNDPROC函数. 与其配合的是UIApplication. 在没有XIB文件的情况下,是通过程序的方式加载UIApplication的一个实例完成框架的建立的. 为了从XIB文件中加载,我们就要自己创建一个XIB文件,这是首先的问题. 如何将XIB文件和AppDelegate的类关联是下面的问题.
我们知道,AppDelegate需要一个UIApplition实例,这个事例保存所有XIB上元素的拷贝.所以File's Owner的类名我们要改为UIApplicaion 同时UIApplicaion有一个插座IBOutlet刚好是我们AppDelegate可以对接的.类型UIApplicationDelegate 于是我们首先拖放一个Object,修改类名为我们的xAppDelegate,这样就可以将这个Object和UIApplication中的delegate链接了. delegateThe delegate of the application object. @property(nonatomic, assign) id<UIApplicationDelegate> delegate DiscussionThe delegate must adopt the UIApplicationDelegate formal protocol. UIApplication assigns and does not retain the delegate. Availability
Declared InUIApplication.h源文件中有UIWindow的变量 window ,我们需要在上面添加的Object(类名xAppDelegate)里面创建一个Window,然后把变量加上IBOutlet后进行链接. 这样就完成了XIB中AppDelegate和它下面Window的两个对象从XIB到代码之间的链接.
可是此时程序的入口并没有改变,文章中推荐的方式是在工程配置中的Main Interface修改为一个XIB文件名,其实就是在程序中加载XIB文件作为入口. 同样的功能,也许我们在代码中也可以实现.类似与initWithNibName的方法,暂时我没有实现.
还有就是注释掉了一个初始化的函数:- (BOOL) application:didFinishLaunchingWithOptions: 这个方法中的操作是跟我们从XIB加载相冲突的.
通过以上几个步骤,我们就可以从Empty Application中自定义的加载一个XIB文件了. 学习到这里,让我对整个XIB的工作方式和UIApplication的工作原理又有了更深一步的了解. 对于以后的多视图学习非常的有帮助.
以上操作的详细步骤如下,顺便复习一下: 1.创建Empty application,此时项目中只有一个AppDelegate的类 2.新建文件,选择User Interface下的Empty 命名为MainWindow 3.打开新建的MainWindow.xib文件
4.将File's Owner的类名修改为UIApplication 5. 在Library中拖放一个Object到图下的位置 6.将该object的类名修改为文件中AppDelegate的类名(同时还可以给object命名下Label) 7.拖放一个Window到左边 8. 在xAppDelegate的h文件中,给window的属性加上IBOutlet @interface DemoAppDelegate : UIResponder <UIApplicationDelegate>@property (strong, nonatomic) IBOutlet UIWindow *window;@end
9.将File's Owner 和 拖放的Object按照以下方式连接
10.在项目属性中,把Main Interface修改成你的xib文件名MainWindow 11. 在xAppDelegate.m文件中,将 - (BOOL) application:didFinishLaunchingWithOptions:
这个方法全部注释掉
以上在Lion 10.7.2 XCode4.2中测试通过. |
XCode 4.2开发笔记图文
最新推荐文章于 2024-05-01 00:04:58 发布
2011/12/02 14:23