iOS常用的几个基础类 一个不用xib文件的例子
2012-06-04 16:16
507 查看
我们从这张图开始说吧。从这张图我们可以很清楚的看到iOS开发的MVC结构。UIApplication,Application Delegate 和 View Controller都是控制器。UIWindow和各种其他的UIView都是视图。
1。 程序的启动函数UIApplicationMain
该函数主要创建一个UIApplication对象和一个UIApplicationDelegate对象,并且设置事件循环,然后开始处理事件。
int UIApplicationMain ( int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName );
该函数有四个参数,前两个我们都很熟悉了。第三个函数是UIApplication类的名字,如果为空程序会自动创建一个UIApplication的实例。第四个函数是,UIApplicationDelegate类的名字,如果为空系统会从Main xib文件寻找。
如果不用Main xib文件呢? 那就必须自己指定一个了,总不能让程序启动无门吧。
首先,我们先用一个不使用xib文件的例子来看看UIApplicationDelegate,UIWindow,UIViewController和UIView是怎么连起来的。我们的例子自定义了Test2AppDelegate(和项目创建的TestAppDelegate区别开),MyViewController和MyView及个类。
首先,创建一个window-based的项目。因为我们不用xib文件,所以删除plist文件中NSMainNibFile这一项和对应的value。然后,设置UIApplicationMain函数的第四个参数为指定的Delegate的名字。
int retVal = UIApplicationMain(argc, argv, nil, @"Test2AppDelegate");
2。UIApplicationDelegate
为了区别于项目自动生成的UIApplicationDelegate类,我自己定义了Test2AppDelegate类。
#import <Foundation/Foundation.h> @interface Test2AppDelegate : NSObject <UIApplicationDelegate>{ UIWindow *window; UIViewController *viewController; } @property (nonatomic, retain) UIWindow * window; @property (nonatomic, retain) UIViewController *viewController; @end
从代码可以看到,该类继承NSObject并实现了UIApplicationDelegate协议。
这个协议的方法提供了UIApplication的关键事件信息,比如完成加载,即将关闭或者内存不足。实现对应的方法就可以对这些事件进行处理。
代理类的重要之处还在于对程序的状态转换做出相应的处理。比如程序完成加载后会调用application didFinishLaunchingWithOptions。我们在这个方法里面创建一个UIWindow,否则程序会显示黑屏。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { CGRect appFrame = [UIScreen mainScreen].applicationFrame; // Override point for customization after application launch. window = [[UIWindow alloc] initWithFrame:appFrame]; viewController = [[MyViewController alloc] initWith_Frame:appFrame]; [window addSubview:viewController.view]; [self.window makeKeyAndVisible]; return YES; }
3。UIWindow
UIWindow是所有视图的根,每个程序里只有一个UIWindow实例。它定义了管理并协调窗口在屏幕上显示的对象。它的两个主要功能是分发事件给UIView对象和提供显示视图的区域。
4。UIViewController
UIViewController提供了基本的View管理模型。每个实例管理一个View hierarchy(层次结构)。我们定义的UIViewController如下所示。
#import <UIKit/UIKit.h> @interface MyViewController : UIViewController { CGRect frame; } @property (nonatomic) CGRect frame; - (id) initWith_Frame:(CGRect) _frame; @end
用户也可以用其他已经定义的视图控制器,比如UITabBarController,来管理更复杂的视图层次结构。
如果要使用xib文件来定义UIViewController的视图,必须调用initWithNibName: bundle方法来初始化。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; }
注意:每次用xib文件都别忘了connection。要想让xib文件视图不显示为黑屏必须做两件事情。
a)设置File‘s owner 为我们定义的MyViewController。点File’s Owner在Identity Inspector窗口设置Customer class。
b)建立xib文件和File‘s Owner(MyViewController)的view的连接。在File’s Owner的Connection Inspector窗口中,Outlets中的view上拉一条线到左面Objects列表的view。(xcode 4)
如果使用自定义的UiView,必须继承loadiew方法来加载视图。
另外,用xib文件就表定义loadView方法了,不然也可能会显示黑屏。
- (void)loadView { UIView* myV = [MyView alloc]; [myV initWithFrame: frame]; [self setView: myV]; [myV release]; }
5。UIView
如果不用xib文件而是自定义视图,就要实现drawRect方法自己画。
- (void)drawRect:(CGRect)rect { CGContextRef X = UIGraphicsGetCurrentContext(); CGRect bounds = CGContextGetClipBoundingBox(X); CGPoint center = CGPointMake((bounds.size.width / 2), (bounds.size.height / 2)); CGContextSetRGBFillColor(X, 0.9,0.9,0.9, 0.8f); CGContextFillRect(X, bounds); char* text = "GaGa... NO XIB! Hello iOS!"; CGContextSelectFont(X, "Helvetica Bold", 32.0f, kCGEncodingMacRoman); CGContextSetTextDrawingMode(X, kCGTextFill); CGContextSetRGBFillColor(X, 0.1f, 0.3f, 0.8f, 0.85f); CGAffineTransform xform = CGAffineTransformMake( 1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f ); CGContextSetTextMatrix(X, xform); CGContextShowTextAtPoint(X, 0, center.y, text, strlen(text)); }
转帖:http://hchen229.iteye.com/blog/1002816
相关文章推荐
- Objective-C ,ios,iphone开发基础:几个常用类-NSNumber
- [C++基础]一个比较常用的配置文件/初始化文件读取程序
- iOS基础-UIKit框架-多控制器管理-项目常用文件,4大对象,程序启动原理
- Objective-C ,ios,iphone开发基础:几个常用类-NSNumber
- iOS使用xib文件创建一个组件为子控件,进行复用
- iOS UI基础-4.2应用程序管理 Xib文件使用
- 一个超级简单的dwr配置文件,介绍了dwr最常用的几个标签(转)
- iOS使用xib文件创建一个组件为子控件,进行复用
- IOS基础学习笔记二:Bundle加载文件、XIB使用
- IOS中使用.xib文件封装一个自定义View
- IOS AddressBook 对contact处理,一般常用到的几个文件(保存,删除,属性获取,group等)
- HTML基础:一个例子熟悉常用标签
- 不用xib文件,直接用代码实现xib。实现一个toolbar,tableview,具体如效果图
- iOS开发——UI基础-自定义构造方法,layoutSubviews,Xib文件,利用Xib自定义View
- **IOS:xib文件解析(xib和storyboard的比较,一个轻量级一个重量级)
- 初学IOS_UI基础,滑动面板_XIB框架版_有GIF图_有源文件
- Objective-C ,ios,iphone开发基础:几个常用类-NSString
- IOS中可以一个多个xib文件对应一个类。当然也可以在一个Xib中创建多个view然后也是用一个类控制
- 一个超级简单的dwr配置文件,介绍了dwr最常用的几个标签(转)
- 一个小例子(利用commons-fileupload上传文件)