虽然没有为Swift 3更新答案,但可能很简单。
如何在编辑文本字段时将字符附加到UITextField?在编辑结束后用户不键入时,应附加字符。
例如:
User types: 1
Field Updates: 1 kg
User types 123
Field Updates: 123 kg
尝试使用EditingChanged IBActions解决这个问题但是如何阻止值为每个键入的新字符附加“kg”?
Example "1 kg 2 kg 3 kg"
答案 0 :(得分:4)
尝试这种方式可能会帮助你。
为正在编辑的文字添加文本字段的目标
textField.addTarget(self, action: #selector(self.textFieldDidChange), for: .editingChanged)
在Observer方法中尝试以下方式
func textFieldDidChange(textfield: UITextField) {
var text = textField.text?.replacingOccurrences(of: " KG", with: "")
text = text! + " KG"
textField.text = text
print("Text changed")
}
答案 1 :(得分:2)
您需要UITextFieldDelegate方法
var response = result['s:Envelope']['s:Body'][0].OrderReportResponse[0].obj[0];
var marketOrder = response['a:MarketOrder'];
// Storing values in Dictionary
var dict1 = [];
var dict2 = [];
for (var i = 0; i < marketOrder.length; i++) {
var keys1 = []; // Storing multiple keys in 1 object
var keys = [];
// if (dict1.length === 0) {
keys.push({
k1: marketOrder[i]['a:SecurityExchange'],
k2: marketOrder[i]['a:Symbol'],
k3: marketOrder[i]['a:MaturityMonthYear']
});
if (keys1.indexOf(keys[0].k1) && keys1.indexOf(keys[0].k2) && keys1.indexOf(keys[0].k3)) {
keys1.push(keys[0].k1, keys[0].k2, keys[0].k3);
}
for (var k1 in keys1[0]) {
var dict = {};
dict[keys1] = marketOrder[i];
if (dict1.indexOf(dict)) {
dict1.push(dict);
}
}
}
var targetObj = [];
var targetObj1 = [];
for (var i = 0; i < dict1.length; i++) {
for (var key in dict1[i]) {
if (!targetObj.hasOwnProperty(key)) {
targetObj[key]= 0;
//targetObj1.push(targetObj);
}
targetObj[key] += (dict1[i][key]);
}}
console.log(targetObj);
我应该警告你,由于Swift处理字符串的方式,这实现了令人难以置信的烦恼。通常最好只将文本转换为NSString(这是UTF16)并处理范围。但是,如果您只是在做数字并且可以使用固定的小数位,则情况更容易处理。保留一个代表您的“实数”的自定义数字,然后更新该字段以反映您的格式化数字。由于您只允许数字,因此有许多情况需要处理(此代码不会处理复制/粘贴)。
您必须在故事板中设置文本字段委托和键盘(为数字)。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
答案 2 :(得分:0)
使用UITextFieldDelegate's
功能:
public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool // return NO to not change text
您必须使用range参数组合来自此函数的textfield.text和string参数中的文本,以便在您根据范围键入/粘贴/清除时获取文本字段上的字符串。
跟踪range.length,因为它总是给出删除/清除字符串的计数,当你输入文本时它是0。 range.location
给出了编辑的位置。
然后你可以将形成的字符串设置为textfield.text
并返回false 记住 - 返回false而不是true
答案 3 :(得分:0)
将文本字段委托与控制器相符并尝试此解决方案。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if string == "" {
// handle backspace scenario here
return true
} else if var textString = textField.text {
let unitString = "kg"
if textString.contains(unitString) {
textString = textString.replacingOccurrences(of: unitString, with: "")
textString += string + unitString
textField.text = textString
} else {
textField.text = string + unitString
}
return false
}
return true
}