UITextView的子类在iOS7中有奇怪的行为

时间:2013-09-30 13:25:10

标签: uitextview ios7

嘿伙计们,我需要一些帮助。 我有一个UITextView的子类,曾经在iOS6下工作。但在iOS7中它有一些奇怪的行为。我重写了shouldChangeTextInRange方法,所以我可以处理一些键盘输入。 以下代码显示了这种奇怪的行为。当你按'a'(或者你可以用你想要的任何其他字符替换'a')时,光标将向后跳转到UITextView中的某个位置,然后返回到它应该的位置。 在iOS6中它永远不会显示这样的东西。在iOS7中,它不会影响用户的输入,但它看起来很奇怪。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {

    NSMutableString *updatedText = [[NSMutableString alloc] initWithString:textView.text];
    [updatedText insertString:text atIndex:range.location];
    const char *pch = [text UTF8String];

    switch (*pch) {
        case 'a': // you can replace it with any other char.
            textView.text = updatedText;
            return NO;
            break;

        default:
            return YES;
            break;
    }
}

如果你想看,我把这个演示放在一个简单的项目中。     https://dl.dropboxusercontent.com/u/75922069/test-uitextview.zip

2 个答案:

答案 0 :(得分:0)

我通过创建NSLayoutManager来解决此错误。或者,如果您只需要获取正确的textVIew.contentSize,则可以从此处获取详细信息: Click here

答案 1 :(得分:0)

尝试直接更改UITextView的NSTextStorage对象中的文本。你可以这样做:

[myTextView.textStorage replaceCharactersInRange:(NSRange) withString:(NSString *)]

[myTextView.textStorage insertAttributedString:(NSAttributedString *) atIndex:(NSUInteger)]

请注意,这只适用于IOS 7 ...