【发布时间】:2014-10-01 03:18:15
【问题描述】:
我正在制作一个应用程序,其中有一个 UITextView,它只允许用户输入 2 行文本。所以文本不会到达第三行,因为 UITextView 会要求它停止。有谁知道如何在 Swift 编程中解决这个问题?我发现有一种方法可以实现这一点,但用 Objective-C 代码编写
- (BOOL) textView:(UITextView *)textView
shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
NSString *newText = [textView.text stringByReplacingCharactersInRange:range withString:text];
_tempTextInputView.text = newText;
// Calcualte the number of lines with new text in temporary UITextView
CGRect endRectWithNewText = [_tempTextInputView caretRectForPosition:_tempTextInputView.endOfDocument];
CGRect beginRectWithNewText = [_tempTextInputView caretRectForPosition:_tempTextInputView.beginningOfDocument];
float beginOriginY = beginRectWithNewText.origin.y;
float endOriginY = endRectWithNewText.origin.y;
int numberOfLines = (endOriginY - beginOriginY)/textView.font.lineHeight + 1;
if (numberOfLines > maxLinesInTextView) {// Too many lines
return NO;
}else{// Number of lines will not over the limit
return YES;
}
}
我一直在努力处理 Swift 中的等效代码,尤其是这行代码:
NSString *newText = [textView.text stringByReplacingCharactersInRange:range withString:text];
我只是不知道如何在 Swift 中处理 NSRange。有人可以帮我吗?
【问题讨论】:
-
我认为这应该适用于该行: NSString *newText = textView.text.stringByReplacingCharactersInRange(range, withString: text)
-
@rdelmar:那是什么意思?
-
你问如何将那一行翻译成 Swift。你就是这样做的(假设你已经创建了范围和文本)。
-
@rdelmar:您在编辑之前的评论令人困惑。但是这一行给了我一个语法错误 textView.text.stringByReplacingCharactersInRange(range, withString: text) 说“nsrange is not convertible to range string.index”
-
我认为您可能必须为 textView 的文本创建一个变量(var theText = textView!.text as NSString),并在我发布的代码中使用它而不是 textView.text。
标签: ios swift uitextview