这是开始写的第一个iOS程序。
1.首先创建一个SingleViewApplication界面(iOS中),这个模式就是默认为我们提供了一个界面。
2.更改项目的名称和icon图标
①info.plist文件—>bundle name—>填写自己工程的名字
②添加一张图片到这个位置,并且更名为icon.png这样app的图标就改好了。
P.S. icon图标可以去https://www.iconfinder.com搜索相应地图标(不过有点还需要钱)。
3.分析过程
使用并得到UI(User Interface 用户界面)。
①实现点击功能:UIButton(按钮)
②实现显示内容功能:UILabel(文本标签)
③为什么能够显示相应的视图:UIWindow(窗口)
④界面(用户能够看到的画面):UIViewController
⑤如何实现上面的相应内容(画面版):storyboard
4.如何实现
△尺寸:iPhone5/5s: 320*568
iPhone4/4s: 320*480
①设置背景颜色:Main.storyboard-->那个框框中,然后点击这个位置
②添加UILabel
可以在右下角的这个地方搜索相应控件,直接拖拽到想要摆放的位置就可以。
a.可以自由拖动,调整视图在界面上的大小
b.改变alignment属性 设置居右对齐
c.设置font属性 改变文字的显示大小
d.background 设置背景颜色
e.text 设置显示的文字
③添加用于与用户进行交互的按钮UIButton,同样是在右下角进行搜索Button。
④如何接收用户的点击事件
.storyboard里面的每一个界面都应该有相应的控制器和它相关联一个界面就是一个UIViewController。我们这个程序只有一个界面,storyboard里面的界面和viewController相关联。
.storyboard里面负责界面的布局、viewController负责代码逻辑IBAction(IB interface builder)。用于关联storyboard里面控件的事件。
.可以用按住Ctrl进行拖拽。
⑤在关联类中如何获取storyboard里面的UI对象(通俗点,怎么能通过代码来实现UI对象的功能)
.IBOutlet 用于关联storyboard里面控件本身
也可以按住Ctrl进行拖拽,将UILabel拖拽到ViewController.m中。(只用当"insert"提示显示出来的时候才是正确的)
⑥如何使用一个数字来区别每一个UI控件
每一个UI控件都有一个tag属性值,默认值为0。
当UI控件已经准备完毕之后开始写代码。是在ViewController.m中进行编写。
1 #import "ViewController.h" 2 3 typedef enum{ 4 kStatusNum, 5 kStatusOperation 6 }kStatus; 7 8 typedef enum{ 9 kOperationTypeAdd = 1, 10 kOperationTypeMinus, 11 kOperationTypeMultiply, 12 kOperationTypeDevide, 13 kOperationTypeEqual, 14 kOperationTypeNone, 15 kOperationTypeSign = 11, 16 kOperationTypePercent, 17 kOperationTypePoint 18 }kOperationType; 19 20 @interface ViewController () 21 @property (weak, nonatomic) IBOutlet UILabel *resultLabel; 22 @property (assign, nonatomic) double firstParameter; 23 @property (assign, nonatomic) kOperationType lastOperation, isOtherOperation; 24 @property (assign, nonatomic) kStatus status; 25 @end 26 27 @implementation ViewController 28 29 - (void)viewDidLoad { 30 [super viewDidLoad]; 31 // Do any additional setup after loading the view, typically from a nib. 32 //赋初值 33 self.lastOperation = kOperationTypeNone; 34 self.status = kStatusNum; 35 self.isOtherOperation = kOperationTypeNone; 36 } 37 38 - (void)didReceiveMemoryWarning { 39 [super didReceiveMemoryWarning]; 40 // Dispose of any resources that can be recreated. 41 } 42 43 //数字键 44 - (IBAction)numButtonDidClicked:(UIButton *)sender { 45 46 NSMutableString *showNum = [NSMutableString stringWithCapacity:0]; 47 //进行判断,是输入数字并且上一次操作不是正负 48 if (self.status == kStatusNum && self.isOtherOperation != kOperationTypeSign) { 49 //进行显示的拼接 50 [showNum appendFormat:@"%@%@", self.resultLabel.text, sender.titleLabel.text]; 51 //判断第一个字符是“0”切第二个字符不为“.”的情况 52 BOOL compareResultA, compareResultB; 53 54 compareResultA = [self comparationIsEqual:[showNum substringToIndex:1] anotherNSString:@"0"]; 55 compareResultB = [self comparationIsEqual:[showNum substringWithRange:NSMakeRange(1, 1)] anotherNSString:@"."]; 56 //这种情况需要删除开头的“0” 57 if (compareResultA == YES && compareResultB == NO) { 58 [showNum deleteCharactersInRange:NSMakeRange(0, 1)]; 59 } 60 61 } else{ 62 [showNum appendFormat:@"%@", sender.titleLabel.text]; 63 self.status = kStatusNum; 64 self.isOtherOperation = kOperationTypeNone; 65 } 66 67 //显示结果 68 self.resultLabel.text = showNum; 69 } 70 71 - (BOOL)comparationIsEqual:(NSString *)StringA anotherNSString:(NSString *)StringB{ 72 if ([StringA isEqualToString:StringB]) { 73 return YES; 74 } else{ 75 return NO; 76 } 77 } 78 79 //+ - * / = 键 80 - (IBAction)operationButtonDidClicked:(UIButton *)sender { 81 if (self.status != kStatusOperation) { 82 self.status = kStatusOperation; 83 84 //有两种情况 85 //1.第一次按操作,只需要保存这次操作 86 if (self.lastOperation != kOperationTypeNone) { 87 //2.前面有操作需要计算,保存这次操作 88 [self calculate]; 89 } else{ 90 //第一个参数输入完毕 保存 91 self.firstParameter = [self.resultLabel.text doubleValue]; 92 } 93 } 94 95 //保存这一次操作 96 if (sender.tag == kOperationTypeEqual) { 97 self.lastOperation = kOperationTypeNone; 98 } else{ 99 self.lastOperation = (kOperationType)sender.tag; 100 } 101 } 102 103 //清零 104 - (IBAction)clearButtonDidClicked:(UIButton *)sender { 105 self.resultLabel.text = @"0"; 106 self.firstParameter = 0; 107 self.lastOperation = kOperationTypeNone; 108 self.status = kStatusNum; 109 self.isOtherOperation = kOperationTypeNone; 110 } 111 112 //计算结果 113 - (void)calculate{ 114 //获取第二个参数 115 double secondParameter = [self.resultLabel.text doubleValue]; 116 double result; 117 118 switch (self.lastOperation) { 119 case kOperationTypeAdd: 120 result = self.firstParameter + secondParameter; 121 break; 122 case kOperationTypeMinus: 123 result = self.firstParameter - secondParameter; 124 break; 125 case kOperationTypeMultiply: 126 result = self.firstParameter * secondParameter; 127 break; 128 case kOperationTypeDevide: 129 result = self.firstParameter / secondParameter; 130 break; 131 default: 132 break; 133 } 134 //显示最终结果 135 self.resultLabel.text = [NSString stringWithFormat:@"%g", result]; 136 137 //当前结果就是写一次的参数值 138 self.firstParameter = result; 139 140 //更改操作符 141 self.lastOperation = kOperationTypeNone; 142 } 143 144 //± % 键 145 - (IBAction)otherOperationButtonDidClicked:(UIButton *)sender { 146 double temp; 147 //判断按键 148 switch (sender.tag) { 149 case kOperationTypeSign: 150 temp = [self.resultLabel.text doubleValue]; 151 self.resultLabel.text = [NSString stringWithFormat:@"%g", temp * (-1)]; 152 self.firstParameter = [self.resultLabel.text doubleValue]; 153 self.isOtherOperation = kOperationTypeSign; 154 break; 155 case kOperationTypePercent: 156 temp = [self.resultLabel.text doubleValue]; 157 self.resultLabel.text = [NSString stringWithFormat:@"%g", temp / 100]; 158 159 break; 160 default: 161 break; 162 } 163 } 164 165 //. 键 166 - (IBAction)pointButtonDidClicked:(UIButton *)sender { 167 if (self.isOtherOperation != kOperationTypePoint) { 168 self.resultLabel.text = [NSString stringWithFormat:@"%@.", self.resultLabel.text]; 169 self.isOtherOperation = kOperationTypePoint; 170 } 171 172 } 173 174 175 @end
请教一下各位大神,小数点的问题有什么更好地想法没有,我觉得自己的解决方案有些繁琐,并不是最简便的。谢谢。Orz~