如何从键盘打印格式化文本

时间:2015-12-18 08:21:44

标签: ios swift

我想知道如何从键盘键打印格式化文本。例如,我有一个连接到键盘的工具栏,我点击键盘上的"bold",然后从键盘上打印的每个字母都会以粗体显示。这就是我所拥有的,但它不起作用,String似乎没有格式。

  func keyPressed(sender: AnyObject?) {
       let button = sender as! UIButton
       let title = button.titleForState(.Normal)

       let attrs = [NSFontAttributeName : UIFont.boldSystemFontOfSize(15)]
       let boldString = NSMutableAttributedString(string:title!, attributes:attrs)


       (textDocumentProxy as UIKeyInput).insertText(boldString.string)
  }

1 个答案:

答案 0 :(得分:1)

字符串不是格式,你是对的。您应该使用NSAttributedStringattributedText直接操纵您的目标。

let str = "Hello, world!"
let attrs = [NSFontAttributeName: UIFont.systemFontOfSize(15)]

let attributedString = NSAttributedString(string: str, attributes: attrs)
yourTextView.attributedText = attributedString

请注意,您想要做的具体事情很棘手,因为属性字符串会将属性(如粗体)附加到文本的某些部分,而不会在每个字母上添加#34;"。因此,如果你读出当前的属性字符串然后尝试修改插入符号中的属性而不实际插入任何东西,它就不会工作。

所以,这不会起作用:

let existingAttributedString = yourTextView.attributedText.mutableCopy() as! NSMutableAttributedString
let newAttrs = [NSFontAttributeName: UIFont.boldSystemFontOfSize(15)]
let newAttributedString = NSAttributedString(string: "", attributes: newAttrs)
existingAttributedString.appendAttributedString(newAttributedString)

这将:

let existingAttributedString = yourTextView.attributedText.mutableCopy() as! NSMutableAttributedString
let newAttrs = [NSFontAttributeName: UIFont.boldSystemFontOfSize(15)]
let newAttributedString = NSAttributedString(string: " ", attributes: newAttrs)
existingAttributedString.appendAttributedString(newAttributedString)

唯一的区别是第二个示例插入一个空格,这足以让iOS将属性附加到。

话虽如此,如果您愿意更改自己的方法,以便用户选择现有文字,然后再按粗体显示,那就非常有效。