如何在 Swift 中编辑或更新文本字段中的文本?
Posted
技术标签:
【中文标题】如何在 Swift 中编辑或更新文本字段中的文本?【英文标题】:How to edit or update the text inside the Text Field in Swift? 【发布时间】:2018-04-25 06:11:05 【问题描述】:这是此屏幕的 .gif:http://g.recordit.co/73jHPP5LE6.gif
如上图所示,有一个 UILabel Rp "25.000.000"
和 TextField "25000000"
内的文本(在用户填写文本字段后)。两者其实都是一种货币。
我想将 Textfield 内的文本从 "25000000"
编辑到 "25.000.000"
,我可以使用一个函数给出点 (.) 分隔符,比如说 formattedWithSeparator()
,它可以用于这样的 Int:
25000.formattedWithSeparator()
但我不知道我必须在哪里实现该功能如果我想在用户更新/写入文本字段时实时编辑/更新 TextField 内的文本(不是占位符)。
我该怎么办?
【问题讨论】:
【参考方案1】:我想你有一个方法是IBAction
用于控制事件editingChanged
,对吧?
@IBAction func textChanged()
...
在此方法中,您可以更改文本字段的文本:
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
// set other properties of the formatter e.g. locale if you want
// remove the grouping separators (the dots) first, then convert to Int
if let amount = Int(tfAmount.text?.replacingOccurrences(of: formatter.groupingSeparator, with: "") ?? "")
if let formatted = formatter.string(from: NSNumber(value: amount))
yourTextField.text = formatted
【讨论】:
【参考方案2】:试试这个:
override func viewDidLoad()
super.viewDidLoad()
textField.addTarget(self, action: #selector(myTextFieldDidChange), for: .editingChanged)
func myTextFieldDidChange(_ textField: UITextField)
if let amountString = textField.text?.currencyInputFormatting()
textField.text = amountString
extension String
// formatting text for currency textField
func currencyInputFormatting() -> String
var number: NSNumber!
let formatter = NumberFormatter()
formatter.numberStyle = .currencyAccounting
formatter.currencySymbol = "$"
formatter.maximumFractionDigits = 2
formatter.minimumFractionDigits = 2
var amountWithPrefix = self
// remove from String: "$", ".", ","
let regex = try! NSRegularExpression(pattern: "[^0-9]", options: .caseInsensitive)
amountWithPrefix = regex.stringByReplacingMatches(in: amountWithPrefix, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.count), withTemplate: "")
let double = (amountWithPrefix as NSString).doubleValue
number = NSNumber(value: (double / 100))
// if first number is 0 or all numbers were deleted
guard number != 0 as NSNumber else
return ""
return formatter.string(from: number)!
【讨论】:
以上是关于如何在 Swift 中编辑或更新文本字段中的文本?的主要内容,如果未能解决你的问题,请参考以下文章
如何在编辑表格视图单元格中的文本字段时重新加载所有表格视图单元格 - iOS Swift
如何创建一个在 XCTest 中定义按钮或文本字段的 swift 文件?