【问题标题】:Add \n to NSString or searching lines position in UITextView将 \n 添加到 NSString 或在 UITextView 中搜索行位置
【发布时间】:2013-09-27 10:12:43
【问题描述】:

我有普通的 NSString ,我将其放入 UITextView 。我需要在新行开始时搜索位置。我认为如果 textview 将字符串从 @"This is a big test string which i want to put into UITextView"@"This is a\n big test \nstring which\n i want to\n put into\n UITextView" 自动。然后我可以搜索“\n”并找到某行的位置。知道我该怎么做吗?

【问题讨论】:

  • 你真正想要达到什么目的?您想查找文本视图将文本包裹到下一行的位置吗?为什么?
  • @Wain 我将文本的其他部分与位于某个手动行中的文本进行比较。如果可以使用此方法完成,它将看起来像从 \n 到 \n 的文本是行。因此,当我说“将此文本与位于我的 textview 第二行的文本进行比较”时,它必须这样做

标签: ios objective-c nsstring uitextview


【解决方案1】:

这不是 UITextView 的工作方式。在容器中布局文本的过程比仅查找换行符更复杂,并且不会生成包含 NL 字符的新字符串。

在 iOS 7 上,您可以使用 UITextView 的 TextKit 属性(layoutManagertextContainer、...)来访问底层布局组件并查询它们以获取部分字符串的位置。

如果您必须支持较旧的 iOS 版本,则 characterRangeByExtendingPosition:inDirection: 位于 UITextInput 协议中。您可以使用它来计算一行文本的范围。

【讨论】:

  • 我所有的努力都失败了。你能写信给我如何从第三行获取文本(例如)吗?非常感谢您的回答
  • @IgorPrusyazhnyuk 请告诉我们你尝试了什么。您使用上述 API 的具体问题在哪里?
  • NSString* firstString; // 假设大字符串 UITextView* myTextView =[[UITextView alloc]init]; myTextView.frame=CGRectMake(100, 100, 300, 400); myTextView.text=firstString; UITextRange* myRange=[myTextView characterRangeByExtendingPosition:[myTextView nearestPositionToPoint:CGPointMake(10, 10)] inDirection:UITextLayoutDirectionRight]; UITextPosition* myTextPosition=[myRange 开始]; int position =[myTextView offsetFromPosition:myTextView.beginningOfDocument toPosition:myTextPosition]; '任何时候输出总是0。假设10,10是行的开头
【解决方案2】:

我在应用中数“\n”以了解何时隐藏键盘。而不是计算 \ns 您可以计算其他字符来获取您的“\n”位置。 Rows 只计算“\n”的数量,并在视图加载时重置为零。

// dismiss keyboard from text view with return key
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range  replacementText:(NSString *)text
{
    if([text isEqualToString:@"\n"]) {

        rows++;

        if ( rows >= 2 ){

            // resign text view
            [self.quotationTextView resignFirstResponder];

            return NO;
        }else{
            return YES;
        }
    }else{
        rows = 0;
    }


    return YES;
}

【讨论】:

  • 用户不会向 UITextView 输入文本。我将从其他无法更改的资源中获取文本
猜你喜欢
  • 2011-11-13
  • 2019-03-20
  • 2012-11-03
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多