我很难解决这个问题。我的目标是在textview的每一行添加一个特定的文本。到目前为止,我的应用程序一直运行良好,但是当我单击添加文本时,它仍然只添加到文本视图的第一行,我希望能够将它添加到textview的每一行。到目前为止,我有这个:
@IBAction func alertView(sender: AnyObject) {
textToCopy.selectedRange = NSMakeRange(0,0)
textToCopy.text = "test\(textToCopy.text)"
任何帮助将不胜感激,谢谢!
答案 0 :(得分:2)
这个问题有点复杂。所以我们应该把它分解成更具体的部分。
编写一个函数来计算包含a的textView的高度 具有特定字体和一定宽度的字符串。
将textView的字符串分解为由空格分隔的单词数组,假设该行按字而不是 字符。
第1部分:根据固定宽度计算文字高度
func textHeight(text:String, attrib:[String: AnyObject], width:CGFloat) -> CGFloat{
let formattedString = NSMutableAttributedString(string: text)
formattedString.setAttributes(attrib, range: NSMakeRange(0, count(text)))
return textViewHeightFromAttributedString(formattedString, width)
}
func textViewHeightFromAttributedString(text:NSAttributedString, width:CGFloat) -> CGFloat{
//we could be more efficient by only creating this tempView once.
let tempView = UITextView()
tempView.attributedText = text;
let size = tempView.sizeThatFits(CGSizeMake(width, 10000))
return size.height
}
第2部分:将文本细分为字数组,并将字体注释为属性数组和UITextView的宽度。
let textContent = "I can only imagine what long string would go here. I can only imagine what long string would go here. I can only imagine what long string would go here"
let parts = textContent.componentsSeparatedByString(" ");
var attrs = [NSFontAttributeName : UIFont.systemFontOfSize(19.0)]
let textViewWidth:CGFloat = 100;
第3部分:将每个单词一次追加到一起以找出新行的位置,以便我们可以附加行前缀。
let linePrefix = "ALERT:"
var adjusted = linePrefix
var lastHeight = textHeight(adjusted, attrs, textViewWidth)
for part in parts{
let spacePart = " " + part
let newHeight = textHeight(adjusted + spacePart, attrs, textViewWidth)
if newHeight > lastHeight{
adjusted += "\n" + linePrefix + spacePart;
lastHeight = newHeight
}else{
adjusted += spacePart;
}
}
现在将adjusted
放回textView!
您可以在此处进行的一项优化是在第一种方法中重复使用tempView而不是每次都重新创建它,但我会将更改留给您......因为它实际上取决于您实际需要的效率是。
答案 1 :(得分:0)
也许\ n会有帮助吗?
textToCopy.text =" test(textToCopy.text)\ n"
答案 2 :(得分:0)
因此,如果要添加可变数量的字符串,则应将其存储在array
中,然后尝试:
@IBOutlet weak var textToCopy: UITextView!
@IBAction func alertView(sender: AnyObject) {
for var index = 0; index < numOfStringsToAdd; ++index {
textToCopy.text! += "My next string \n"
}