UITextView : 文本从文本视图的第二行开始

Posted

技术标签:

【中文标题】UITextView : 文本从文本视图的第二行开始【英文标题】:UITextView : Text starts from 2nd line of text view 【发布时间】:2011-11-07 14:16:58 【问题描述】:

我有一个奇怪的问题。我有 3 个UITextFields 和一个UITextView。我可以通过以下方式从一个UITextField移动到下一个UITextField

- (BOOL) textFieldShouldReturn:(UITextField *)textField

    NSInteger nextTag = textField.tag + 1;
    //-- try to find next responde
    UIResponder* nextResponder = [textField.superview viewWithTag:nextTag];

    if (nextResponder) 
    
        //-- found next responce ,so set it
        [nextResponder becomeFirstResponder];
    
    else
    
        [scrollView setContentOffset:CGPointMake(0, 0) animated:YES];
        //-- not found remove keyboard
        [textField resignFirstResponder];
        return YES;
       

    return YES;

一切正常,直到到达UITexView,然后我的光标移动到文本视图的第二行,而不是文本视图的第一行。

文本视图取自 IB。

文本视图代码:

- (void) textViewDidBeginEditing:(UITextView *)textView

    optionalText.hidden = YES ;
    [scrollView setContentOffset:CGPointMake(0, textView.center.y-100) animated:YES];


- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
       
    // Any new character added is passed in as the "text" parameter
    if ([text isEqualToString:@"\n"])
    
        // Be sure to test for equality using the "isEqualToString" message
        [textView resignFirstResponder];
        [scrollView setContentOffset:CGPointMake(0, 0) animated:YES];

        // Return FALSE so that the final '\n' character doesn't get added      
        if ([[commentTxtView.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0)
        
            optionalText.hidden = NO ;
            NSLog(@"Text View is null");
            [scrollView setContentOffset:CGPointMake(0, 0) animated:YES];
        

        return FALSE;
    

    return TRUE;

看起来像这样:

可能是什么问题?为什么不是从文本视图的第一行开始?

【问题讨论】:

在这种情况下什么是滚动视图?我会仔细检查这一行: [scrollView setContentOffset:CGPointMake(0, textView.center.y-100) animated:YES]; 你能告诉我们你在哪里调用你的 textFieldShouldReturn 方法吗?如果你像在视图生命周期的一开始那样调用它,因为你有多个 textField,条件“if (nextResponder)”会自动将你发送到下一个 textField。 【参考方案1】:

我打赌你的textFieldShouldReturn: 应该返回NO,以防nextResponder 是你的UITextField。现在你总是返回YES,这意味着密钥可能被传递给UITextView,然后它将插入新行。

【讨论】:

那么我该如何解决呢?其实我只是把 [textView becomeFirstResponder];当 nextResponder 不可用时,在 textFieldShouldReturn 方法中。我知道这只是序列的问题,因为我知道我的文本视图何时是最后一个。【参考方案2】:

对于任何来寻找 Swift 2.0 翻译的人...

textFieldShouldReturnyourUIITextView.becomeFirstResponder() 之后返回true,而不是返回false

为我工作!

希望这会有所帮助!

【讨论】:

谢谢。你节省了我的时间 +1

以上是关于UITextView : 文本从文本视图的第二行开始的主要内容,如果未能解决你的问题,请参考以下文章

UITextView 无意中添加了新行?

UITextView在输入时隐藏文本

UITextView 不在 nextLine 上打印文本?

在表单的第二行制作更大的文本框

如何在列表视图中聚焦下一个编辑文本

如果 UITextView 是第一个子视图,那么在视图顶部和文本开头之间会出现一个大空间