你可以创建自定义的NSFormatter的子类,来格式化除日期和数字之外的数据的表示法。
想要子类化NSFormatter,你必须至少重写如下方法:
- stringForObjectValue:
- getObjectValue:forString:errorDescription:
在第一方法中,你把单元格(cell)的对象转换成字符串表示法;在第二种方法中,你把字符串转换为与单元格关联的对象。
你也可以重写attributedStringForObjectValue:withDefaultAttributes:来把对象转换为与之有相关属性的字符串。例如,如果你想把负的总金额显示为红色,你使用该方法返回红色文本属性的字符串。在attributedStringForObjectValue:withDefaultAttributes:方法中,通过调用stringForObjectValue:方法得到无属性的字符串,然后给该字符串设置适当的属性。
如果编辑的字符串必须和显示的字符串不同(例如,货币字段的显示版本显示的是美元符号,但是编辑版本不是),除了stirngForObjectValue:之外,还可以实现editingStringForObjectValue:。
在OS X中,使用 isPartialStringValid:proposedSelectedRange:originalString:originalSelectedRange:errorDescription: 和 isPartialStringValid:newEditingString:errorDescription:,你可以在每个键按下的时候编辑单元格的原文内容,并防止用户输入无效的字符。你可以将此动态编辑应用于社会保障号码;数据录入人员只需要输入数字一次,因为格式化器会自动插入分隔字符。
网友评论