這幾天學習masonry,搭了一個計算器的界面,的確很簡單方便,本著新手的認學態度,索性把計算器功能做出來,沒想到啊,新手就是新手,弄了三天才算有所小成。代碼放出來給大家參考一下,有不足之處還請留言教我。廢話不說,下面上代碼
~~~
#import "MainViewController.h"
#import "Masonry.h"
@interfaceMainViewController ()
{
? ? UITextField * utf;//輸出數字的
? ? UIButton * btn;//按鈕部分,不包括數字0
? ? UIButton * btn1;//按鈕:數字0
? ? UILabel * line;//按鈕間的分割線,布局用
? ? NSString * a;//接收輸入的數字,進行拼接用
? ? NSString *b;//接收輸入的小數點“.”,控制數字的小數點的個數用
? ? NSMutableString * c;//計算器有刪除數字功能,c來接收數字的刪除結果
? ? NSString *result;//計算(+ - * /)的結果
}
@end
~~~
~~~
@implementation MainViewController
- (void)viewDidLoad {
? ? [superviewDidLoad];
?? ?
? ? [selfcreatnav];
? ? [selfMainview];
? ?
}
-(void)creatnav{//導航定制。
? ? self.navigationItem.title=@"計算器";
? ? self.view.backgroundColor=[UIColorcolorWithRed:0.738green:0.716blue:0.738alpha:1.000];
? ? [self.navigationController.navigationBarsetTitleTextAttributes:
?? ? @{NSFontAttributeName:[UIFontsystemFontOfSize:19],
?? ? ? NSForegroundColorAttributeName:[UIColorwhiteColor]}];
? ? [self.navigationController.navigationBar?setBackgroundImage:[UIImage?imageNamed:@"title"]forBarMetrics:UIBarMetricsDefault];
}
-(void)Mainview{
? ? WS(ws);//ws是指我用了一個宏來獲取屏幕的view
? ? NSArray * num=@[@"AC",@"exit",@"<-",@"÷",@"7",@"8",@"9",@"*",@"4",@"5",@"6",@"-",@"1",@"2",@"3",@"+",@"",@"",@".",@"="];
//下面我是用了masonry來進行界面布局,關于masonry的使用請百度或者github,這個東西來布局整個界面我只用了四十行代碼,不得不說,很好很強大。
? ? utf=[[UITextField?alloc]init];
? ? utf.backgroundColor=[UIColorcolorWithRed:0.222green:0.216blue:0.223alpha:1.000];
? ? utf.textColor=[UIColor?whiteColor];
? ? utf.font=[UIFontsystemFontOfSize:40];
? ? utf.userInteractionEnabled=NO;
? ? utf.textAlignment=NSTextAlignmentRight;
? ? [self.view?addSubview:utf];
? ? [utf?mas_makeConstraints:^(MASConstraintMaker *make) {
? ? ? ? make.top.equalTo(ws.view.mas_top).with.offset(64);
? ? ? ? make.size.mas_equalTo(CGSizeMake(S_x,100));//s_x以及s_y是當前屏幕的寬和高,定義為宏
? ? ? ? make.left.and.right.equalTo(ws.view);
? ? }];
? ? for (int i=0; i<20; i++) {
? ? ? ? btn=[UIButton?buttonWithType:UIButtonTypeCustom];
? ? ? ? btn.backgroundColor=[UIColor?clearColor];
? ? ? ? [btn?setTitle:num[i]?forState:UIControlStateNormal];
? ? ? ? [btn?setBackgroundImage:[UIImage?imageNamed:@"hehe"]forState:UIControlStateNormal];
? ? ? ? [btn?setBackgroundImage:[UIImage?imageNamed:@"hehep"]forState:UIControlStateHighlighted];
? ? ? ? [btn?setTitleColor:[UIColorblackColor]forState:UIControlStateNormal];
? ? ? ? [btn?addTarget:selfaction:@selector(numadd:)forControlEvents:UIControlEventTouchUpInside];
? ? ? ? btn.tag=i;
? ? ? ? [self.view?addSubview:btn];
? ? ? ? [btn?mas_makeConstraints:^(MASConstraintMaker *make) {
? ? ? ? ? ? make.size.mas_equalTo(CGSizeMake((S_x-3)/4, (S_y-64-100)/5));
? ? ? ? ? ? make.top.mas_equalTo((64+100)+(i/4)+(i/4)*(S_y-64-100)/5);
? ? ? ? ? ? make.left.mas_equalTo(((S_x-3)/4)*(i%4)+(i%4));
?? ?//因為整個按鈕都是固定大小,而數字0我希望他是大小為2個普通按鈕的大小,所以我把btn。tag=16和17兩個按鈕隱藏,此處覆蓋上定制的btn1的title為數字0的按鈕 ? ? ? ?
? ? ? ? ? ? if (i==17 || i==16) {
? ? ? ? ? ? ? ? btn.hidden=YES;
? ? ? ? ? ? }
? ? ? ? }];
? ? ? ? btn1=[UIButton?buttonWithType:UIButtonTypeCustom];
? ? ? ? [btn1?setTitle:@"0"forState:UIControlStateNormal];
? ? ? ? [btn1?setTitleColor:[UIColorblackColor]forState:UIControlStateNormal];
? ? ? ? btn1.backgroundColor=[UIColorclearColor];
? ? ? ? [btn1?setBackgroundImage:[UIImage?imageNamed:@"hehe"]forState:UIControlStateNormal];
? ? ? ? [btn1?setBackgroundImage:[UIImage?imageNamed:@"hehep"]forState:UIControlStateHighlighted];
? ? ? ? btn1.tag=21;
? ? ? ? [btn1?addTarget:selfaction:@selector(numadd:)forControlEvents:UIControlEventTouchUpInside];
? ? ? ? [self.view?addSubview:btn1];
? ? ? ? [btn1?mas_makeConstraints:^(MASConstraintMaker *make) {
? ? ? ? ? ? make.left.equalTo(ws.view);
? ? ? ? ? ? make.size.mas_equalTo(CGSizeMake(((S_x-3)/4)*2+1,(S_y-64-100)/5));
? ? ? ? ? ? make.top.mas_equalTo(64+100+4+4*(S_y-64-100)/5);
? ? ? ? }];
?? ? ? ?
? ? }
?? ?
}
//到此處,布局部分結束,下面上按鈕點擊事件部分,點擊按鈕時。
-(void)numadd:(UIButton *)numpad{
? ? switch (numpad.tag) {
? ? ? ? //這些case是數字按鈕。統一規定點擊數字時utf.text進行數字拼接
? ? ? ? case4:
? ? ? ? case5:
? ? ? ? case6:
? ? ? ? case8:
? ? ? ? case9:
? ? ? ? case10:
? ? ? ? case12:
? ? ? ? case13:
? ? ? ? case14:
? ? ? ? case18:
? ? ? ? case21:
? ? ? ? ? ? //歸零后繼續輸入數字,取消最前的0的顯示
? ? ? ? ? ? if ([utf.text?isEqual:@"0"]) {
? ? ? ? ? ? ? ? utf.text=@"";
? ? ? ? ? ? }
//下面的兩行代碼 可以使輸入數字拼接,但是需要注意,如果計算器有歸零功能,點擊之后數字歸零,再繼續輸入數字會接著0輸出,類似,189歸零是0,接著輸入213會成為0213,此時需要將最前面的0消失,所以有上面的那一行代碼
? ? ? ? ? ? a=[utf.text ?stringByAppendingString:numpad.currentTitle];
? ? ? ? ? ? utf.text=a;
? ? ? ? ? ? break;
? ? ? ? case0://AC歸零
? ? ? ? ? ? utf.text=@"0";
? ? ? ? ? ? break;
? ? ? ? case1:
? ? ? ? ? ? exit(0);
? ? ? ? ? ? break;
? ? ? ? case2:
? ? ? ? ? //刪除數字時。將utf。text轉化為可變字符串從最后一個開始刪除,設置長度為0時給text賦值為0否則崩潰
? ? ? ? ? ? c=[NSMutableString?stringWithString:utf.text];
? ? ? ? ? ? [c ?deleteCharactersInRange:NSMakeRange(c.length-1,1)];
? ? ? ? ? ? utf.text=c;
? ? ? ? ? ? if (utf.text.length==0) {
? ? ? ? ? ? ? ? utf.text=@"0";
? ? ? ? ? ? }
? ? ? ? ? ? break;
? ? ? ? ? ? break;
? ? ? ? default:
? ? ? ? ? ? break;
? ? }
? ?//控制輸入數字時“.”的出現次數為1次。檢測到點的個數超過一個時,刪除掉最后一個
? ? b=@".";
? ? NSArray * array=[acomponentsSeparatedByString:b];
? ? NSInteger count=[arraycount]-1;
? ? if (count>1) {
? ? ? ? c=[NSMutableString?stringWithString:utf.text];
? ? ? ? [c ?deleteCharactersInRange:NSMakeRange((c.length-1),1)];
? ? ? ? utf.text=c;
? ? }
? ?/**
?? ? *? 該處,輸入運算符時先保存之前的utf.text和此運算符,點此運算符后將text歸零,接收運算符之后的數字
?? ? */
? ? if ([numpad.currentTitle?isEqualToString:@"+"] || [numpad.currentTitle?isEqualToString:@"-"] || [numpad.currentTitle ?isEqualToString:@"*"] || [numpad.currentTitle?isEqualToString:@"÷"]) {
? ? ? ? NSLog(@"前一組數字:%@",utf.text);
? ? ? ? if ([utf.textisEqualToString:@""]) {
? ? ? ? ? ? utf.text=@"0";
? ? ? ? }
? ? ? ? [[NSUserDefaults ?standardUserDefaults]setObject:utf.textforKey:@"first"];
? ? ? ? utf.text=@"0";
? ? ? ? NSString * symbol=[[NSUserDefaults?standardUserDefaults]objectForKey:@"symbol"];
? ? ? ? if (![symbol?isEqualToString:@""]) {
? ? ? ? ? ? symbol=@"";
? ? ? ? }
? ? ? ? [[NSUserDefaults?standardUserDefaults]setObject:numpad.currentTitle?forKey:@"symbol"];
}
? ? if ([numpad.currentTitle?isEqualToString:@"="]) {
? ? ? ? NSString * storage=[[NSUserDefaults?standardUserDefaults]objectForKey:@"first"];
? ? ? ? NSString * symbol=[[NSUserDefaults?standardUserDefaults]objectForKey:@"symbol"];
? ? ? ? float houmian=[utf.text ?floatValue];
? ? ? ? NSLog(@"后一組數字:%f",houmian);
? ? ? ? float qianmian=[storage?floatValue];
? ? ? ? if ([symbol?isEqualToString:@"+"]) {
? ? ? ? ? ? result=[NSString?stringWithFormat:@"%.2f",[self?jiafa:qianmian?b:houmian]];
? ? ? ? ? ? utf.text=result;
? ? ? }
? ? ? ? if ([symbol?isEqualToString:@"-"]) {
? ? ? ? ? ? result=[NSString?stringWithFormat:@"%.2f",[self?jianfa:qianmian?b:houmian]];
? ? ? ? ? ? utf.text=result;
? ? ? ? }
? ? ? ? if ([symbol?isEqualToString:@"*"]) {
? ? ? ? ? ? result=[NSString?stringWithFormat:@"%.2f",[self?chengfa:qianmian?b:houmian]];
? ?? ? ? ? utf.text=result;
? ? ? ? }
? ? ? ? if ([symbol?isEqualToString:@"÷"]) {
? ? ? ? ? ? result=[NSString?stringWithFormat:@"%.2f",[self?chufa:qianmian?b:houmian]];
? ? ? ? ? ? utf.text=result;
? ? ? ? }
? ? }
}
-(float)jiafa:(float)a b:(float)b{
? ? return a+b;
}
-(float)jianfa:(float)a b:(float)b{
? ? return a-b;
}
-(float)chengfa:(float)a b:(float)b{
? ? return a*b;
}
-(float)chufa:(float)a b:(float)b{
return a/b;
}
~~~
//以上這些,可以實現基本的加減乘除運算,并且小數點只能輸入一個,有退格和歸零功能,在網上查看了其他一些大神的代碼,感覺不是很容易懂,作為新手,我能做的只有這些了。。。希望對大家有所幫助,整個代碼加起來也就200行不到的樣子,其中masonry的應用可能有的人不太熟悉,建議花時間去了解一下。另外對按鈕點擊事件的判斷處肯定有沒想到的地方和沒做好的邏輯處理,畢竟是一個簡易的demo。拿過去復制粘貼就能運行了。記得先裝第三方的masonry包哦!
這個是效果圖,不喜歡的同學可以將按鈕背景圖片去掉,就可以看到masonry編輯界面的效果了,記得去掉背景圖片后將self。view的backgroundcolor設置顏色,這樣看的效果才會明顯,類似下面這樣的
- 前言
- iOS開發中@2x等后綴的圖片干嘛用的
- 上傳APP至AppStore時打包出現U option must have a non-empty value
- UIbutton文字相關
- 將UIview的image保存到本地的方法
- 百度推送iOS
- 靜態庫的封裝
- 提高IOS開發效率的工具
- iOS開發筆記6:圖片輪播及其無限循環效果,ios筆記
- ABPeoplePickerNavigationController系統通訊錄使用
- iOS中添加UITapGestureRecognizer手勢識別后,UITableView的didSelectRowAtIndexPath失效
- ios搭一個簡易計算器(利用masonry布局)