Commit 03559268 authored by David黄金龙's avatar David黄金龙

处理 文书的提交

parent c9875046
......@@ -7,6 +7,7 @@
//
import UIKit
import SwifterSwift
class YHHKPlanItemView: UIView {
override init(frame: CGRect) {
......@@ -75,7 +76,12 @@ class YHHKPlanItemView: UIView {
//提示文字
var tipsTxt : String = "请输入,300字内"
var maxNumbler : Int = 300
// var maxNumbler : Int = 300
var maxNumbler : Int = 300 {
didSet {
tipsTxt = "请输入," + maxNumbler.string + "字内"
}
}
//提示lable
private lazy var tipsLable : UILabel = {
......@@ -211,12 +217,16 @@ private extension YHHKPlanItemView {
if model.type == .planOther {
maxNumbler = 500
tipsTxt = "请输入,500字内"
tipsLable.text = tipsTxt
} else {
maxNumbler = 300
maxNumbler = 10 //for test hjl
}
tipsLable.text = tipsTxt
myTextView.text = getFuckString(string: model.content)
numberLabel.text = myTextView.text.count.string + "/\(maxNumbler)"
if myTextView.text.count > maxNumbler {
let textNum = calcTextLength(string: myTextView.text)
numberLabel.text = textNum.string + "/\(maxNumbler)"
if textNum > maxNumbler {
numberLabel.textColor = .failColor
} else {
numberLabel.textColor = UIColor.placeHolderColor
......@@ -241,38 +251,194 @@ private extension YHHKPlanItemView {
}
}
func calcTextLength(string : String) -> Int {
if string.isEmpty {
return 0
}
/*
具体规则:
(1)仅计算中文/英文/数字,不计算标点等特殊字符。
(2)中文算一个字;
(3)连续的英文/数字记为一个字。
(4)空格不计入字数统计
(5)如果英文之间有空格或标点符号,例如“aaa aaaa”字数记为2;中英混杂分开计算,例如“aaa你好 你aaa”字数记为5;
(6)非中文、英文、数字的语言,例如日文,不计入字数统计。
(7)如果C端用户,在APP上输入的字数超过300个字符,则APP再传给后端时,进行截断后再发给后台
*/
var isPreDone : Bool = true //前一个字符已处理
let stringLength : Int = string.unicodeScalars.count
var totalNumber : Int = 0
for (index,scalar) in string.unicodeScalars.enumerated() {
if scalar.value >= 0x4E00 && scalar.value <= 0x9FFF {
// 中文字符的Unicode范围
if isPreDone == false {
totalNumber = totalNumber + 1
}
totalNumber = totalNumber + 1
isPreDone = true
} else if scalar.isASCII && (scalar >= "a" && scalar <= "z" || scalar >= "A" && scalar <= "Z") {
// 英文字符(不包括ASCII数字和标点符号)
isPreDone = false
} else if scalar.isASCII && (scalar >= "0" && scalar <= "9") {
// 数字
isPreDone = false
} else {
if isPreDone == false {
totalNumber = totalNumber + 1
}
isPreDone = true
}
if index == stringLength - 1 {
if isPreDone == false {
totalNumber = totalNumber + 1
}
}
}
return totalNumber
}
//获取固定长度的字符串
func getFuckString(string : String) -> String {
if string.isEmpty {
return ""
}
if string.count <= maxNumbler {
return string
}
/*
具体规则:
(1)仅计算中文/英文/数字,不计算标点等特殊字符。
(2)中文算一个字;
(3)连续的英文/数字记为一个字。
(4)空格不计入字数统计
(5)如果英文之间有空格或标点符号,例如“aaa aaaa”字数记为2;中英混杂分开计算,例如“aaa你好 你aaa”字数记为5;
(6)非中文、英文、数字的语言,例如日文,不计入字数统计。
(7)如果C端用户,在APP上输入的字数超过300个字符,则APP再传给后端时,进行截断后再发给后台
*/
var isPreDone : Bool = true //前一个字符已处理
let stringLength : Int = string.unicodeScalars.count
var totalNumber : Int = 0
var returStrn = ""
for (index,scalar) in string.unicodeScalars.enumerated() {
if scalar.value >= 0x4E00 && scalar.value <= 0x9FFF {
// 中文字符的Unicode范围
if isPreDone == false {
totalNumber = totalNumber + 1
}
totalNumber = totalNumber + 1
isPreDone = true
if totalNumber <= maxNumbler {
returStrn = returStrn + String(scalar)
} else {
return returStrn
}
} else if scalar.isASCII && (scalar >= "a" && scalar <= "z" || scalar >= "A" && scalar <= "Z") {
// 英文字符(不包括ASCII数字和标点符号)
isPreDone = false
returStrn = returStrn + String(scalar)
} else if scalar.isASCII && (scalar >= "0" && scalar <= "9") {
// 数字
isPreDone = false
returStrn = returStrn + String(scalar)
} else {
if isPreDone == false {
totalNumber = totalNumber + 1
if totalNumber <= maxNumbler {
returStrn = returStrn + String(scalar)
} else {
return returStrn
}
}
isPreDone = true
}
if index == stringLength - 1 {
if isPreDone == false {
totalNumber = totalNumber + 1
if totalNumber <= maxNumbler {
returStrn = returStrn + String(scalar)
} else {
return returStrn
}
}
}
}
return returStrn
}
}
extension YHHKPlanItemView : UITextViewDelegate {
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if text.isEmpty {
return true
}
let newLength = (textView.text as NSString).length + text.count - range.length
var newLength = (textView.text as NSString).length + text.count - range.length
if dataMode?.type == .planOther {
return newLength <= maxNumbler
} else {
newLength = calcTextLength(string: textView.text)
}
return newLength <= maxNumbler
return newLength <= maxNumbler - 1
}
func textViewDidChange(_ textView: UITextView) {
guard let model = dataMode else { return }
guard let text = textView.text else { return }
model.content = text
// var number = 300
// if model.type == .planOther {
// number = maxNumbler
// }
var txtNum : Int = 0
if model.type == .planOther {
numberLabel.text = myTextView.text.count.string + "/\(maxNumbler)"
txtNum = myTextView.text.count
numberLabel.text = txtNum.string + "/\(maxNumbler)"
model.content = text
} else {
numberLabel.text = myTextView.text.count.string + "/\(maxNumbler)" //for test hjl
txtNum = calcTextLength(string: text)
numberLabel.text = txtNum.string + "/\(maxNumbler)" //for test hjl
printLog(text.count)
if text.count <= maxNumbler{
model.content = text
} else {
var ttt = text
let subString = ttt.slice(from: 0, length: maxNumbler)
model.content = subString
}
}
if myTextView.text.count > maxNumbler {
if txtNum > maxNumbler {
numberLabel.textColor = .failColor
} else {
numberLabel.textColor = UIColor.placeHolderColor
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment