疯狂ios讲义之不使用界面布局文件开发UI界面

博文视点 发布于 2014/01/20 15:17
阅读 2K+
收藏 3

如果打算使用纯代码来开发UI界面,则不需要设计任何界面布局文件,没有界面布局文件,也就不再需要使用自定义的视图控制器。这样程序可以直接在应用程序委托对象的application: didFinishLaunchingWithOptions:方法中创建UIWindow和应用程序界面——所有这些对象的创建都使用Objective-C代码来完成。


实例:无界面布局文件开发iOS应用

首先创建一个iOSEmpty Application应用。在创建iOS应用时,选择“Empty Application”项即可,如图9.35所示。



对于“Empty Application”类型的iOS应用,Xcode只生成应用程序委托类,不会生成任何界面设计文件,也不会生成任何控制器类。

对于打算使用纯代码开发UI界面的开发方式来说,我们的应用并不需要任何界面设计文件,也不需要任何控制器。程序只要修改应用程序委托的application: didFinishLaunchingWithOptions:方法,并在该方法中创建UI控件,然后利用这些UI控件搭建应用程序界面即可。下面是修改过的application: didFinishLaunchingWithOptions:方法代码。

程序清单:codes/09/9.5/CodeUI/ CodeUI/FKAppDelegate.m


// 应用程序加载完成后,将会自动回调该方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
	// 创建UIWindow对象,并将该UIWindow初始化为与屏幕相同大小
	self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
	// 设置UIWindow的背景色
	self.window.backgroundColor = [UIColor whiteColor];
	// 创建一个UIViewController对象
	UIViewController* controller = [[UIViewController alloc] init];
	// 让该程序的窗口加载并显示viewController视图控制器关联的用户界面
	self.window.rootViewController = controller;
	// 创建一个UIView对象
	UIView* rootView = [[UIView alloc] initWithFrame
		:[[UIScreen mainScreen] bounds]];
	// 设置controller显示rootView控件
	controller.view = rootView;
	// 创建一个圆角按钮
	UIButton* button = [UIButton buttonWithType: UIButtonTypeRoundedRect];
	// 设置按钮的大小
	button.frame = CGRectMake(120, 100, 80, 40);
	// 为按钮设置文本
	[button setTitle:@"确定" forState:UIControlStateNormal];
	// 将按钮添加到rootView控件中
	[rootView addSubview:button];
	// 创建一个UILabel对象
	self.show = [[UILabel alloc] initWithFrame
		:CGRectMake(60 , 40 , 180 , 30)];
	// 将UILabel添加到rootView控件中
	[rootView addSubview:self.show];
	// 设置UILabel默认显示的文本
	self.show.text = @"初始文本";
	self.show.backgroundColor = [UIColor grayColor];
	// 为圆角按钮的触碰事件绑定事件处理方法
	[button addTarget:self action:@selector(clickHandler:)
		forControlEvents:UIControlEventTouchUpInside];
	// 将该UIWindow对象设为主窗口并显示出来
	[self.window makeKeyAndVisible];
	return YES;
}



上面的代码中,首先创建了一个UIWindow作为应用程序的窗口,接下来创建一个UIView作为UIWindow显示的根视图(需要借助一个UIViewController对象)。

一旦程序中有了UIView作为容器,接下来代码归纳起来相当于只有三行(此处的三行是一种归纳说法,并非实际只有三行)。

Ø 创建UI控件,比如创建UILabel、创建UIButton等。

Ø 调用addSubView:方法将UI控件添加到其他容器中。

Ø 多次调用UI控件的setter方法来设置UI控件的外观、行为。

上面代码中为按钮的触碰事件绑定了clickHandler:事件处理方法,因此程序还需要在应用程序委托类中定义该方法。方法代码如下:

程序清单:codes/09/9.5/CodeUI/ CodeUI/FKAppDelegate.m

- (void) clickHandler:(id)sender
{
	self.show.text = @"开始学习iOS吧!";
}



上面的代码只是简单地修改show控件的文本内容,这样即可实现当用户触碰按钮时动态改变show控件的文本内容。

运行该程序,单击程序中的按钮,即可看到如图9.36所示的效果。

通过上面的开发过程可以发现:不管是通过纯代码来创建UI控件,再将这些UI控件搭建成程序界面;还是使用界面设计文件来搭建程序界面,其本质是相同的。它们的本质都是把UI控件当成小的积木块,然后将这些“积木块”按自己的意愿组合在一起,就可以做成iOS应用的程序界面了。

需要指出的是,使用纯代码方式来开发iOS应用并不是最好的开发方式,这种方式不仅开发步骤异常烦琐,而且所有创建程序界面的代码都由应用程序委托对象的方法负责完成,这并不符合MVC设计原则,因此不利于程序组件的解耦。通过学习这种开发方式,我们可以更好地理解iOS应用中应用程序委托的作用,同时也能更好地理解iOS程序界面的底层实现原理。

下面介绍一种更实用的代码方式开发UI界面。

本文节选自《疯狂 iOS 讲义(上)Objective-C 2.0 与 iPhoneiPad 应用开发基础


加载中
0
洲宝
洲宝
嘛意思?
0
Joiningss
Joiningss
吓尿了,一行代码一行注释...
打一把
打一把
疯狂讲义只有狂人才能看懂。一般人看它那就是一坨 s
0
人生天地间
人生天地间
在书店大概翻了翻这本书,感觉不值得买~
0
Joiningss
Joiningss
编著的名字屌爆了...
0
紫电清霜
紫电清霜

之前买过一本李刚的ssh

0
SteveKou
SteveKou
这人逻辑很神奇,讲的乱七八糟却看起来一副很牛逼的样子。
0
金贞花
金贞花
疯狂讲义就是一坨 s
返回顶部
顶部