iOS限制textfield输入两位小数逻辑思维步骤记录(Swift)
来源:互联网 发布:php网店系统源码 编辑:程序博客网 时间:2024/06/04 20:14
先贴代码,逻辑思维在下面。
import UIKitclass ViewController: UIViewController ,UITextFieldDelegate{ var textField:UITextField! var isFirst = true var rangePoint:NSRange! override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = UIColor.whiteColor() textField = UITextField(frame: CGRectMake(50,200,200,40)) view.addSubview(textField) textField.backgroundColor = UIColor.lightGrayColor() textField.borderStyle = .RoundedRect textField.clearButtonMode = .WhileEditing textField.delegate = self // Do any additional setup after loading the view, typically from a nib. } func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { print("range:\(range) rangeLenght:\(range.length) rangeLocation:\(range.location) string:\(string)") if string == "" || string == "\n" { if rangePoint != nil { if range.location == rangePoint.location { isFirst = true } } return true } if ( Int(string) <= 9 && Int(string) >= 0 ) || string == "." { if isFirst == true { if string == "." { isFirst = false rangePoint = range return true } }else if isFirst == false { if string == "." { return false }else if range.location - rangePoint.location > 2 { return false } } }else {return false} return true } func textFieldShouldReturn(textField: UITextField) -> Bool { print(textField.text) textField.resignFirstResponder() return true } func textFieldShouldClear(textField: UITextField) -> Bool { return true } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
创建UITextField
<span style="font-size:18px;">var textField:UITextField!</span>
展示textField,别忘了添加UITextFieldDelegate
<span style="font-size:18px;">textField = UITextField(frame: CGRectMake(50,200,200,40)) view.addSubview(textField) textField.backgroundColor = UIColor.lightGrayColor() textField.borderStyle = .RoundedRect textField.clearButtonMode = .WhileEditing textField.delegate = self</span>
以下内容都是在func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {}方法中扩展
第一步:打印一些有利于思考的参数
print("range:\(range) rangeLenght:\(range.length) rangeLocation:\(range.location) string:\(string)")
第二步:判断输入点号
if string == "." { return true}
第三步:思考第二次输入点号的时候应该返回false,由此增加一个参数isFirst做控制(var isFirst = true)
if isFirst == true {
if string == "." {
isFirst = false
return ture
}
}else if isFirst == false {
if string == "." {
return false
}
}
第四步: 思考输入小数点之后,如何限制输入小数点后两位,由此增加一个参数rangePoint纪录小数点输入时的NSRange(var rangePoint:NSRange!)
if isFirst == true {
if string == "." {
isFirst = false
rangePoint = range
return ture
}
}else if isFirst == false {
if string == "." {
return false
}else if range.location - rangePoint.location > 2 {
return false
}
}
第五步:经过前面四步,已经实现了输入小数点后两位字符,但没有限制只限数字,所以这一步要做的就是限制输入数字或小数点
if (Int(string) <= 9 && Int(string) >= 0 ) || string == "." {
if isFirst == true {
if string == "." {
isFirst = false
rangePoint = range
return ture
}
}else if isFirst == false {
if string == "." {
return false
}else if range.location - rangePoint.location > 2 {
return false
}
}
}else {return false }第六步:在接下来的测试中发现,无法输入删除键或者回车键了,通过开始的print命令发现,输入删除键时打印“” 输入回车键时打印换行
if string == "" || string == "\n" {
return true
}
if (Int(string) <= 9 && Int(string) >= 0 ) || string == "." {
if isFirst == true {
if string == "." {
isFirst = false
rangePoint = range
return ture
}
}else if isFirst == false {
if string == "." {
return false
}else if range.location - rangePoint.location > 2 {
return false
}
}
}else {return false }第七步:删除键和回车键输入正常了,通过以下方法打断点判断
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
func textFieldShouldClear(textField: UITextField) -> Bool {
return true
}
第八步:测试的时候发现,当输入第一个小数点后,删除该小数点,无法继续输入小数点,所以需要判断是否删除了第一个输入的小数点
if string == "" || string == "\n" {
if range.location == rangePoint.location {
isFirst = true
}
return true
}
if (Int(string) <= 9 && Int(string) >= 0 ) || string == "." {
if isFirst == true {
if string == "." {
isFirst = false
rangePoint = range
return ture
}
}else if isFirst == false {
if string == "." {
return false
}else if range.location - rangePoint.location > 2 {
return false
}
}
}else {return false } if string == "" || string == "\n" {
if rangePoint != nil {
if range.location == rangePoint.location {
isFirst = true
}
}
return true
}
if ( Int(string) <= 9 && Int(string) >= 0 ) || string == "." {
if isFirst == true {
if string == "." {
isFirst = false
rangePoint = range
return true
}
}else if isFirst == false {
if string == "." {
return false
}else if range.location - rangePoint.location > 2 {
return false
}
}
}else {return false}
return true
第十步:尽量考虑了所有情况了,但我的大脑也许也受限制了,忽略了某些情况,如果有朋友发现了请评论提醒一下 :)
最后思考一下简化一下代码,发现有一句还是可以简化的
if string == "" || string == "\n" {
if rangePoint != nil {
if range.location == rangePoint.location {
isFirst = true
}
}
return true
}
if ( Int(string) <= 9 && Int(string) >= 0 ) || string == "." {
if isFirst == true {
if string == "." {
isFirst = false
rangePoint = range
return true
}
}else if isFirst == false {
if string == "." || range.location - rangePoint.location > 2 {
return false
}
// if string == "." {
// return false
// }else if range.location - rangePoint.location > 2 {
// return false
// }
}
}else {return false}
return true
}
- iOS限制textfield输入两位小数逻辑思维步骤记录(Swift)
- iOS限制textfield输入两位小数
- 限制textField输入两位小数
- iOS限制文本框输入两位小数和最大值
- 输入框限制输入两位小数
- EditText限制输入两位小数
- 限制 EditText 最多输入两位小数
- Android EditText限制输入两位小数
- 限制两位小数
- ios textfield 输入限制
- Android-EditText两种方法限制输入两位小数
- JS限制文本框输入金额并保留两位小数
- JS限制文本框输入金额并保留两位小数
- JS限制文本框输入金额并保留两位小数
- EditText限制 只能输入0.00 -100保留两位小数
- iOS TextField电话号码输入限制
- IOS textField 输入个数限制
- Swift 限制 TextField 输入字符数量
- Swift 第三方库 - SnapKit
- swift 设置statusBar的文字颜色
- android 页面跳转生命周期
- 史上最全、最强SpringMVC详细示例实战教程(一)
- Spatial Pyramid Matching 小结
- iOS限制textfield输入两位小数逻辑思维步骤记录(Swift)
- Java中 char的初始化及占位
- String<-->int之间的转换
- lua脚本简单的例子使用
- 史上最全、最强SpringMVC详细示例实战教程(二)
- java web项目的打包与部署
- 安卓下使用OpenCL进行PowerVR GPU编程
- Swift 第三方库 - Alamofire
- Android 避免APP启动闪黑屏的解决办法(Theme和Style)