iPhoneアプリ:電卓をつくる 最終回

このエントリーを含むはてなブックマークはてなブックマーク - iPhoneアプリ:電卓をつくる 最終回

前回(iPhoneアプリ:電卓をつくる その5)までのプログラムで、かなり電卓っぽくなってきましたが、まだ演算が出来ないのでした。今回は最終回なので演算まで出来るようにして、電卓プログラムを完成させましょう。

calc18

最終的なインタフェースはこんな感じです。割り算と掛け算ができひんやんけ!とか、殺風景すぎるわ!とかの非難はごもっともです(笑)インタフェースのお化粧に関しては後ほど説明したいと思います。

まずはIBを使って、前回のボタンに加えて演算子ボタン(+とー)とイコールボタンをつけましょう。そして、プラスとマイナスの各ボタンにTag番号の0と1を振っておきます。ここまでで一旦、InterfaceBuilderの作業は終了です。

次にヘッダファイルをみます。
CalcViewController.h

@interface Calc2ViewController : UIViewController {
	IBOutlet UILabel *label;
	BOOL startInput;
	int currentValue;
	int operation;
}

-(IBAction)numberButtonPressed:(id)sender;
-(IBAction)clearButtonPressed:(id)sender;
-(IBAction)equalButtonPressed:(id)sender;
-(IBAction)opButtonPressed:(id)sender;

numberButtonPressedとclearButtonPressedメソッドは前回と同じく、それぞれテンキーかクリアボタンが押されたときにコールされます。今回新たに付け加えたのがequalButtonPressedとopButtonPressedメソッドです。前者はイコールボタンが押されたとき、後者は演算子ボタンが押されたときに呼び出されます。opButtonPressedの中で、押されたボタンのTag番号を見て、プラスかマイナスどちらのボタンが押されたかを判断します。

ではそのプログラムを見てみましょう。
CalcViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];
	startInput	 = YES;
	currentValue = 0;
}

-(IBAction)numberButtonPressed:(id)sender
{
	UIButton *b = (UIButton *)sender;
	
	if( startInput ){
		// 最初の1桁目が0なら表示しない
		if( b.tag == 0 ) return;
		// 新しく表示する文字列を作成
		label.text = [NSString stringWithFormat:@"%d", b.tag];
		startInput =  NO;
	} else {
		// すでに表示されている文字列に連結
		label.text = [NSString stringWithFormat:@"%@%d", label.text, b.tag];		
	}
}

-(IBAction)equalButtonPressed:(id)sender
{
	// 直前に押された演算子で場合分け
	if( operation == 0 ){
		currentValue += [label.text intValue];
	} else if( operation == 1 ){
		currentValue -= [label.text intValue];
	}
	
	// 表示の更新
	label.text = [NSString stringWithFormat:@"%d", currentValue];
	startInput = YES;
}

-(IBAction)opButtonPressed:(id)sender
{
	UIButton *b = (UIButton *)sender;
	
	// 現在値の保存
	currentValue = [label.text intValue];
	
	// 演算の保存
	operation = b.tag;
	startInput = YES;
}

-(IBAction)clearButtonPressed:(id)sender
{
	label.text = @"0";
	startInput = YES;	
}

今回新たに追加した変数としてcurrentValueがあります。これは現在までの計算結果をint型として保持する変数です。演算子ボタンやイコールボタンが押された直後にこの値を更新しています。

今回追加したもうひとつの変数がoperationです。この変数は、どの演算子が使われたのかを記憶するための変数で、演算子ボタンが押された際に保存され、イコールボタンが押されたときにこの変数をみて、どの演算を行うかを決定します。

残りの部分は、ほぼ前回と同じものになっているので理解しやすいかと思います。ここまで理解できたら、掛け算や割り算の演算を実装するのも、難しくはないと思います。是非挑戦してみてくださいね!

今回使用したプログラムをここに置いておきます。
参考にしてみてください。

calc5.zip

Leave a Reply

You must be logged in to post a comment.