如何将UITextView中的第一行文本保存为UIView的标题?

时间:2013-03-24 11:43:05

标签: objective-c cocoa-touch ios6 nsstring uitextview

我正在寻找类似于Notes应用的行为。它会自动将第一行文本保存为视图名称。 下面的代码保存按回车时输入的文本作为UIView的标题。我遇到的问题是,如果我在输入任何文本之前按Return键,然后输入一些文本并再次按Return键,则不会保存它。

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


    NSMutableString *newString = [NSMutableString stringWithString:textView.text];
    [newString replaceCharactersInRange:range withString:text];
    NSRange newLineRange = [newString rangeOfCharacterFromSet:[NSCharacterSet newlineCharacterSet]];

    if(newLineRange.length > 0)
    {
        self.title = [newString substringToIndex:newLineRange.location];
    }
    else {
        self.title = textView.text;
    }

    return YES;

}

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您的代码的问题在于它找到了第一个换行符,并使用从零到其位置的子字符串作为标题。在查找换行符之前修剪字符串应解决此问题:将为标题选择第一个非空行(如果有):

[newString replaceCharactersInRange:range withString:text];
NSString *trimmed = [newString stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
NSRange newLineRange = [trimmed rangeOfCharacterFromSet:[NSCharacterSet newlineCharacterSet]];
if(newLineRange.length > 0)
{
    self.title = [trimmed substringToIndex:newLineRange.location];
}
else {
    self.title = trimmed;
}