- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 NSTextField,我已使用以下代码设置:
func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView?
{
let cell : NSTableCellView? = tableView.makeViewWithIdentifier("AutomaticTableColumnIdentifier.0", owner: self) as! NSTableCellView?
cell!.textField!.floatValue = 4.55
let numberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = .CurrencyStyle
numberFormatter.maximumFractionDigits = 0
cell!.textField! = numberFormatter
return cell
}
我还为 NSTextFieldDelegate 中的字段修改设置了一个 Action 。
@IBAction func saveCell(sender: AnyObject)
{
print("saveCell")
}
我的问题是,仅当我输入与货币样式完全匹配的值时,才会触发 saveCell 操作。即输入 45 英镑是可以的,但是当我输入一个普通的 45 时没有任何反应。
如果我删除 NSNumberFormatter 那么它将接受任何条目,但不会按照我想要的方式格式化 textField。
如何接受没有货币符号的 45 值?执行此操作的最佳方法是什么?
最佳答案
您可以将 NSTextField 子类化如下:
import Cocoa
class CurrencyField: NSTextField {
var percent: Double {
return Double(Int(numbers) ?? 0) / 100
}
var currency: String {
return Number.currency.string(from: percent.number) ?? ""
}
var numbers: String {
return stringValue.components(separatedBy: CharacterSet(charactersIn: "0123456789").inverted).joined()
}
override func awakeFromNib() {
super.awakeFromNib()
alignment = .right
stringValue = currency
}
override func textDidChange(_ notification: Notification) {
Swift.print("--> textDidChange")
stringValue = currency
}
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
// Drawing code here.
}
}
extension NumberFormatter {
convenience init(numberStyle: NumberFormatter.Style) {
self.init()
self.numberStyle = numberStyle
}
}
struct Number {
static let currency = NumberFormatter(numberStyle: .currency)
}
extension Double {
var number: NSNumber {
return NSNumber(value: self)
}
}
编辑/更新:
如果您需要一个整数字段,您可以按照以下步骤操作:
import Cocoa
class IntegerField: NSTextField {
var value: Int { return Int(numbers) ?? 0 }
var currency: String { return Number.currency.string(from: value.number) ?? "" }
var numbers: String { return stringValue.components(separatedBy: CharacterSet(charactersIn: "0123456789").inverted).joined() }
override func awakeFromNib() {
super.awakeFromNib()
alignment = .right
stringValue = currency
}
override func textDidChange(_ notification: Notification) {
Swift.print("--> textDidChange")
stringValue = currency
}
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
// Drawing code here.
}
}
extension NumberFormatter {
convenience init(numberStyle: NumberFormatter.Style, maximumFractionDigits: Int = 0) {
self.init()
self.numberStyle = numberStyle
self.maximumFractionDigits = maximumFractionDigits
}
}
struct Number {
static let currency = NumberFormatter(numberStyle: .currency)
}
extension Int {
var number: NSNumber {
return NSNumber(value: self)
}
}
关于Swift:NSTextField numberStyle 不调用操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39457186/
我有一个具有整数属性的模型。当使用 23443 提交模型时,模型绑定(bind)器运行良好并且该值在操作中可用。但是,如果提交的模型带有千位分隔符,如 23,443,则不会解析该值且该属性为零。但我发
我有一个 NSTextField,我已使用以下代码设置: func tableView(tableView: NSTableView, viewForTableColumn tableColumn:
我正在调用以下两行。第二行崩溃。: var a = long.Parse("2,147,483,648", NumberStyles.AllowThousands); var b = long.Par
我正在尝试解析值为“-51.739253997802734”的经度。 var unknownGeoCoordinate = GeoCoordinate.Unknown; double latitude
为了解析表示数字的字符串,用逗号将千位数字与其余数字分开,我试过 int tmp1 = int.Parse("1,234", NumberStyles.AllowThousands); double
我是一名优秀的程序员,十分优秀!