这个例子是 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,如需转载请自行联系原作者

iOS 小项目--小费计算器相关推荐

  1. ios小项目——新浪微博客户端总结

    2019独角兽企业重金招聘Python工程师标准>>> 们还是登录不了,你们要用还是得自己申请appkey并且把回调网址设为baidu.或者是再下面留言,留下你的微博uid我把你加入 ...

  2. Java练手小项目——BMI计算器

    最近有一个减肥的朋友想要知道自己的BMI是多少,问我能不能给他做一个计算BMI的工具(无中生友).于是用Java简单写了一个.一起来看看吧. 身体质量指数是BMI指数(身体质量指数,简称体质指数),是 ...

  3. Android小项目--Suzy计算器

    一.前提准备 在Android Studio下新建一个项目并全部选择默认 对Android界面和布局有一定了解:对Android活动有一些了解 对Java基础知识有一些了解 掌握中缀表达式转后缀表达式 ...

  4. 【微信小程序】微信开发小项目+简易计算器+代码

    效果图: 2. index.json代码: {"usingComponents": {},"navigationBarBackgroundColor": &qu ...

  5. c语言程序 实现简单计算器功能,C语言实现简单计算器小项目

    昨天刚安装上devc++,半夜想着练练C语言吧 于是就看到实验楼有一个计算器的项目 之前做过一次,这次写的主要是思路 首先我们先从原理思考jia,实现简单的计算器就要具备加减乘除这些,看普通的计算器也 ...

  6. 矩阵键盘基于51(UcosII)计算器小项目

    矩阵键盘 最近要给学弟学妹(应该没有)培训矩阵键盘,正好写一写我写矩阵键盘的思路,顺便分享一个之前做的基于ucosii的计算器小项目 原理 原理就不介绍了,CSDN有很多分享的,推荐两篇参考一下: 参 ...

  7. android计算器开源小项目代码(附安装包.apk)

    最近在学习安卓开发,做了个小计算器作为实践.发现网上的计算器教程代码的健壮性不够好,只能够容忍正确的输入.于是我花了几天时间写了个完整的程序.可能是我水平有限,其中条件控制逻辑设计的比较复杂,但我受开 ...

  8. c语言实用计算器项目,C语言实现简单计算器小项目

    昨天刚安装上devc++,半夜想着练练C语言吧 于是就看到实验楼有一个计算器的项目 之前做过一次,这次写的主要是思路 首先我们先从原理思考jia,实现简单的计算器就要具备加减乘除这些,看普通的计算器也 ...

  9. Android小项目———— 冰炭不投de小计算器

    我的第一个Android小项目 冰炭不投de小计算器 一.前言 这是我首个使用java写的app,也在学习郭霖老师的第一行代码和李刚老师的疯狂java讲义之时,进行的练习之作,刚刚学习java和and ...

  10. iOS:quartz2D绘图小项目(涂鸦画板)

    介绍:学了quartz2D的绘图知识后,我根据它的一些功能制作了一个小项目:涂鸦画板. 功能:绘制各种图形,还可以选取相册上的照片做涂鸦,然后保存到相册中.其中,还包括功能有:颜色的选取.线宽的选取. ...

最新文章

  1. easyui datagrid 表格动态隐藏部分列的展示
  2. hdu 2085 核反应堆
  3. System.PlatformNotSupportedException
  4. JQ用变量关联input name
  5. asp.net MVC的EF与easyui DataGrid数据绑定
  6. zabbix mysql.status_zabbix 监控mysql状态
  7. kafka key的作用_震惊了,原来这才是Kafka的“真面目”!
  8. [转] 深入 CSS 行高
  9. 6Linux 终端命令格式
  10. 关于Redis热点key的一些思考
  11. [VC] 通过IHTMLDocument2-DC把网页保存为图片
  12. 【Antd】rawData.some is not a function 报错解决方法
  13. 苹果电脑python编程里面怎么切到中文_苹果电脑输入法怎么切换到中文
  14. L-TAGE预测器 “A 256 Kbits L-TAGE branch predictor”
  15. 5G技术—5G网络架构及关键技术详述测试题目
  16. 处nm是什么意思_“nm”是什么意思啊?
  17. 经验分享:半桥电路的工作原理及注意问题
  18. 查询使用计算机的处理器型号是,cpu型号怎么看,怎么看电脑cpu型号?
  19. 捕捉95%的习惯思维,让用户对你的产品上瘾
  20. 国外计算机cpu排行,电脑处理器排行榜_电脑处理器排行榜最新2020

热门文章

  1. vs2005中文版/2010中文旗舰版等安装步骤和注意
  2. 上网痕迹查询助手Viewurl 2017
  3. AgentWeb url监听问题
  4. 史上最全ActiveX控件下载大全
  5. JAVA文件传输原理及介绍—狂神说
  6. 频谱仪测试gsm信号测试软件,怎样用频谱分析仪测试和分析GSM信号
  7. 可启动 ISO 合并、Windows 安装光盘合集
  8. Python 实现最简单的元胞自动机
  9. tomcat内存溢出,性能优化配置讲解
  10. 算法竞赛入门经典训练指南 pdf