iOS 小项目--小费计算器

简介:

这个例子是 iPhone应用程序开发名师解析 上的一个小例子,基于Xcode4.3.1的工程开发


效果截图:


      

1.创建一个新工程叫TipCalculator; File->New->Project ->single View Application -> next.


2.布局界面


其中包含9个静态Label标签一个动态Label标签,他根据slider值的变化而能变化,然后是9个Textfield和一个slider滑动条

另外需要对TextField属性设置,text设置为0.00,然后键盘选择成Number Pad类型的,只需要对第一个最长的TextfIeld设置一下键盘类型就行,其他的不用设置,其他的8个标签显示了灰色数字,设置的是Placeholder属性;

  

3.设计代码,我们选择左上角的Editor图标,点击出现视图编辑框分为XIB文件,和TipCalculatorViewController.h文件

  

如果没有出现TipCalculatorViewController.h,我们可以根据Automatic文件进行切换

  

4.右键选中最长的那个TextField文件拖动到右边TipCalculatorViewController.h文件@end前面,


然后弹出一个框框,Connection选为Outlet,Storage选为Strong,

  

5.这样我们第一个TextField关联成功,其他的一样,



关联Slider时候,我们对他设置一些属性,(原本是最小值设为0最大值设为0.3但是我在拖动滑动条时候滑动条总是自动变为0,这样修改后问题就可以解决了),他还有一个和calculate的关联方法,

  


我们还需要添加两个方法,并声明一个NSString类的对象

总的代码为

#import <UIKit/UIKit.h>  @interface TipCalculatorViewController : UIViewController  {     NSString *billTotal; } @property (strong, nonatomic) IBOutlet UITextField *billField; @property (strong, nonatomic) IBOutlet UITextField *tipFieldTen; @property (strong, nonatomic) IBOutlet UITextField *tipFieldFifteen; @property (strong, nonatomic) IBOutlet UITextField *tipFieldTwenty; @property (strong, nonatomic) IBOutlet UITextField *totalFieldTen; @property (strong, nonatomic) IBOutlet UITextField *totalFieldFifteen; @property (strong, nonatomic) IBOutlet UITextField *totalFieldTwenty; @property (strong, nonatomic) IBOutlet UITextField *tipFieldCustom; @property (strong, nonatomic) IBOutlet UITextField *totalFieldCustom; @property (strong, nonatomic) IBOutlet UISlider *customPercentSlider; @property (strong, nonatomic) IBOutlet UILabel *customLabel;  -(IBAction)calculate:(id)sender;//计算小费 -(IBAction)backGrounfTap:(id)sender;//处理隐藏键盘  @end


6.因为本人在拖控件是界面设计的不够好,弹出键盘时会覆盖住下面两个TextField,所以添加了一个隐藏键盘的方法,我们把整个背景View视图当做一个大按钮,当输入完金额后点击背景就会隐藏键盘,还是选中XIB文件,然后把View类修改UIControl,然后打开关联事件,选中Touch Down



然后会弹出两个方法,backGrounfTap和calculate(注.原本是想写成backGroundTap,单词写错了变成backGrounfTap,为了其他地方不再修改,就按照backGrounfTap写了),xuanzhbackGrounfTap方法,

//处理键盘 -(IBAction)backGrounfTap:(id)sender {     [billField resignFirstResponder];     [tipFieldCustom resignFirstResponder];     [totalFieldCustom resignFirstResponder];  }
为什么只把三个TextField注册为了第一响应,完全按照自己意愿添加,但是最低我们要保证billField第一个添加上,其他的想添加不想添加都无所谓,只是个人觉得多添加的两个体验会好一点;

7.主要就是calculate方法实现部分

//当调出的键盘被触摸了某个数时或者某个按钮调用此方法 -(IBAction)calculate:(id)sender { //    标记是否是由用户触发     static BOOL toggle =YES;           if (toggle)      { //        设置标志位,此方法的下次调用由程序触发         toggle=NO; //        取出billField文本值         NSString *billFieldText = billField.text; //        将billFieldText字符串类型转换成浮点型         float newTotal = [billFieldText floatValue]; //        获取滑动条的值         float customTipPercent = customPercentSlider.value;         //        事件由billField触发         if (sender == billField)          { //            通过比较billField字符长度,检测billField值是否改变                 if(billFieldText.length < billTotal.length)                     billTotal = [NSString stringWithFormat:@"%.02f",newTotal/10]; //            用户输入数字                 else                     billTotal = [NSString stringWithFormat:@"%.02f",newTotal*10];          //        取出billTotal赋给billField文本值         billField.text = billTotal; //            将billTotal转换成浮点型,newTotal设置为新值         newTotal = [billTotal floatValue]; //         按照10% 15% 20%计算小费值         float tenTip = newTotal*0.1;         float fifteenTip = newTotal*0.15;         float twentyTip = newTotal*0.2; //       显示Tip栏小费值         tipFieldTen.text = [NSString stringWithFormat:@"%.02f",tenTip];         tipFieldFifteen.text = [NSString stringWithFormat:@"%.02f",fifteenTip];         tipFieldTwenty.text = [NSString stringWithFormat:@"%.02f",twentyTip]; //       设置toatal栏中显示值          totalFieldTen.text = [NSString stringWithFormat:@"%.02f",newTotal+tenTip];         totalFieldFifteen.text = [NSString stringWithFormat:@"%.02f",newTotal+fifteenTip];         totalFieldTwenty.text = [NSString stringWithFormat:@"%.02f",newTotal+twentyTip];        } //    当事件由customPercentSlider触发时     else if (sender == customPercentSlider)     {  //        显示滑动条变化值         customLabel.text = [NSString stringWithFormat:@"%i%%",(int)customTipPercent];  //        把按钮值赋给滑动条的值,其中对浮点型值进行了强制转换         customPercentSlider.value=(int)customTipPercent;         customTipPercent = (int)customTipPercent;     } //    计算小费,因为滑动条值为0~30,所以需要除以100求出小费率         float customTip = customTipPercent/100 * newTotal;         tipFieldCustom.text = [NSString stringWithFormat:@"%.02f",customTip]; //        表示应付的总金额         totalFieldCustom.text =[NSString stringWithFormat:@"%.02f",customTip+newTotal];       }     else {         toggle=YES;     } }

8.当我们输入时候,有个特别要求,假如用户小费12元,我们应输入1200,然后他们会自动变成12.00元,主要通过

通过比较

if

billTotal

用户输入数字

else

billTotal

实现方法,通过比较billField原来字符串长度检测用户是否改变金额,来变得小费和总的金额;


源代码:http://download.csdn.net/detail/duxinfeng2010/4464095





     本文转自新风作浪 51CTO博客,原文链接:http://blog.51cto.com/duxinfeng/1208729,如需转载请自行联系原作者



相关文章
|
测试技术 程序员 C++
iOS:项目中无用类检测和无用图片检测汇总
在涉及到项目大改版,或者涉及到某个功能模块大变更,就会涉及到图片废弃和文件废弃的情况。 但是这时候就会遗留下一个很大的问题,没有将废弃的、无用的文件类或资源删除干净。而这次需要对工程代码的无用资源和无用文件进行删除处理,感触颇多,故在此笔记。 首先,感觉很多人的代码习惯还是恶待提高。比如我发现一些人的代码操作习惯,从好到次,可以大略分以下情况
1130 0
iOS:项目中无用类检测和无用图片检测汇总
|
3月前
|
iOS开发
iOS App Store 上传项目报错 缺少隐私政策网址 (URL) 解决方法
iOS App Store 上传项目报错 缺少隐私政策网址 (URL) 解决方法
iOS App Store 上传项目报错 缺少隐私政策网址 (URL) 解决方法
|
9月前
|
缓存 移动开发 前端开发
iOS项目组件化历程
随着业务的发展,App中的页面,网络请求,通用弹层UI,通用TableCell数量就会剧增,需求的开发人员数量也会逐渐增多。 如果所有业务都在同一个App中,并且同时开发人数较少时,抛开代码健壮性不谈,实际的开发体验可能并没有那么糟糕,毕竟作为一个开发,什么地方用什么控件,就跟在HashMap中通过Key获取Value那么简单。 那么当业务成长到需要分化到多个App的时候,组件化的重要性开始体现了。
55 0
|
9月前
|
iOS开发 Perl
将Flutter引入到现有项目中(iOS+Flutter)
将Flutter引入到现有项目中(iOS+Flutter)
|
10月前
|
JavaScript iOS开发
iOS上架之HBuider打包简单项目及注意事项
iOS上架之HBuider打包简单项目及注意事项
|
11月前
|
开发工具 iOS开发
iOS 项目无法在模拟器运行解决办法
iOS 项目无法在模拟器运行解决办法
449 0
|
11月前
|
JavaScript iOS开发
iOS上架之hubuilder打包Vue项目
1.官网下载最新的HBuilderx。 2.准备好一个包含manifest.json的Vue项目,打开进行详细设置,设置完成后,点击保存。 3.首先去App Uploader找到开发证书(开发类型是带development的),点击证书P12下载到桌面。 4.然后根据里面的Bundle ID新建一个描述文件,把描述文件也下载到桌面。 5.菜单项点击‘发行->云打包-打原生安装包’,出现如下图所示弹框,取消广告勾选项,点击打包,把前面下载好的证书,描述文件上传到原生打包列表,提交打包,等待打包完成。(仅以iOS为例) 6.打包完成后,点击“OK”保存安装包到目标文件,发送到手机端安装即可运行。
|
存储 编解码 编译器
iOS项目Project 和 Targets配置详解
最近开始学习完整iOS项目的开发流程和思路,在实际的项目开发过程中,我们通常需要对项目代码和资料进行版本控制和管理,一般比较常用的SVN或者Github进行代码版本控制和项目管理。
696 0
|
JavaScript iOS开发
ios上架之​HBuider打包简单项目及注意事项
ios上架之​HBuider打包简单项目及注意事项
70 0
ios上架之​HBuider打包简单项目及注意事项
|
iOS开发 Perl
iOS开发 -多Target项目如何优雅的使用pods
iOS开发 -多Target项目如何优雅的使用pods
380 0