21.3 iPhone分数计算器

下一个例子要稍微棘手一点,但前一个例子中的概念同样适用。我们不准备说明创建这个例子的所有步骤,而是概要地讲述步骤和设计方法。当然,我们也会给出所有代码。

首先,让我们看看这个应用程序的工作方式。图21-20显示了该应用程序启动后在模拟器中的样子。

计算器应用程序的使用方法是首先输入分子,按下标有Over的键,然后输入分母。例如输入分数2/5的步骤是,按下2数字键,接着按下Over键,然后按下5数字键。可以看到,和其他计算器不同,这个计算器会在显示器上原样显示分数,因此2/5就显示为2/5。

输入一个分数后,接下来可以选择运算—加法、减法、乘法或除法,只要分别按下标有+、-、×或÷的键即可。

输入第二个分数后,按下=键即可完成运算,这一点与标准计算器相同。

注意这个计算器的设计方式是在两个分数之间进行一次运算。本章末尾有一个练习,是让你去掉这种限制。

21.3 iPhone分数计算器 - 图1

图 21-20 完成连接

21.3 iPhone分数计算器 - 图2

图 21-21 一次运算中的输入

按下键时显示会不断更新。图21-21显示了输入分数4/6并按下乘法键后的显示。

图21-22显示了分数4/6和2/8相乘后的结果。你会注意到,结果为1/6表明结果被简化了。

21.3.1 启动新的Fraction_Calculator项目

第一个iPhone程序是从基于Windows的项目模板开始的。在这个模板中,你在应用程序控制器(AppDelegate类)中直接进行(最少的)UI工作。这不是开发多信息UI应用程序的首选方法。AppDelegate类通常只处理与应用程序本身相关的改动,比如应用程序结束启动或者它将变为不活动。

应该在视图控制器(使用UIViewController类实现)中执行与UI相关的操作。这可能是显示文本,重新响应按钮的按下,或者在iPhone屏幕上绘制一个全新的视图。

这第二个程序示例将从创建一个新项目开始。这一次,从New Project窗口中选择View-Base Application。给新项目起名为Fraction_Calculator。

21.3 iPhone分数计算器 - 图3

图 21-22 两个分数相乘的结果

创建项目时,这次可以注意到已经定义好了两个类模板:Fraction_CalculatorAppDelegate.h和Fraction_Calculator-AppDelegate.m定义了项目的应用程序控制器类,而Fraction_CalculatorViewController.h和Fraction_CalculatorViewController.m定义了项目的视图控制器类。如前所述,所有工作是在后一个类中进行的。

我们将首先从应用程序控制器类开始。它包含两个实例变量:一个用于引用iPhone窗口,另一个用于引用视图控制器。这两个变量都是由Xcode建立的。事实上,不需要对应用程序控制器的.h或.m文件做任何改动。

Fraction_CalculatorAppDelegate接口文件如代码清单21-2所示。

代码清单21-2 Fraction_CalculatorAppDelegate.h接口文件


import<UIKit/UIKit.h>

@class Fraction_CalculatorViewController;

@interface Fraction_CalculatorAppDelegate:NSObject<UIApplicationDelegate>{

IBOutlet UIWindow*window;

IBOutlet Fraction_CalculatorViewController*viewController;

}

@property(nonatomic, retain)UIWindow*window;

@property(nonatomic, retain)Fraction_CalculatorViewController*viewController;

@end


UIWindow实例变量window的用途与第一个程序示例相同,它代表着iPhone窗口。Fraction_CalculatorViewController实例变量代表将管理与用户的所有交互以及显示的视图控制器。在类的实现文件中将放入与这些任务相关的所有工作。

代码清单21-2显示了应用程序控制器类的实现文件。如前所述,我们在这个文件中不会做像代码清单21-1中那样的工作,因为这些工作均已经委托给了视图控制器。因此这个文件原封未动,完全保留着创建新项目时Xcode生成它时的原样。

代码清单21-2 Fraction_CalculatorAppDelegate.h实现文件


import“Fraction_CalculatorAppDelegate.h”

import“Fraction_CalculatorViewController.h”

@implementation Fraction_CalculatorAppDelegate

@synthesize window;

@synthesize viewController;

-(void)applicationDidFinishLaunching:(UIApplication*)application{

//Override point for customization after app launch

[window addSubview:viewController.view];

[window makeKeyAndVisible];

}

-(void)dealloc{

[viewController release];

[super dealloc];

}

@end