如何通过在UITextView ios中点击返回键来创建新行

时间:2015-04-12 09:26:49

标签: ios uitextview uitextviewdelegate

我刚接触iPhone。我在我的应用程序中添加了一个使用XIB的UITextView,现在点击完成键后它只是简单地重新键盘。但是,我想通过点击它创建一个新行,意味着它应该转到下一段。请帮我实现我的输出。这是我的代码:

- (void)textViewDidEndEditing:(UITextView *)textView1
{
    if (![textView1 hasText]) {
        [textView1 addSubview:placeholderLabel];
    }
    else{
        NSLog(@"done button clicked!!");
    }

    CGRect rect;

    if(screenBounds.size.height == 568)//iPhone5
    {
        rect = CGRectMake(5, 76, 310, 491);
    }
    else{
        if(_kisiOS7){
            rect = CGRectMake(5, 76, 310, 404);
        }
        else{
            rect = CGRectMake(0, 44, 320, 436);
        }
    }

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];

    txtView.frame = rect;

    [UIView commitAnimations];
}


- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if (range.length == 0) {
        if ([text isEqualToString:@"\n"]) {
            [textView resignFirstResponder];
            return NO;
        }
    }

    return YES;
}

提前致谢。

5 个答案:

答案 0 :(得分:7)

你应该用返回值NO实现委托方法(所以点击“返回”或“完成”它不会关闭键盘。)

- (BOOL)textViewShouldEndEditing:(UITextView *)textView {
    return NO;
}

删除或更改下一行代码的逻辑:

if (range.length == 0) {
    if ([text isEqualToString:@"\n"]) {
        [textView resignFirstResponder];
        return NO;
    }
}

因此在textViewShouldEndEditing中,您可以在需要关闭键盘时确定/计算情况(如果要关闭 - 返回YES,否则返回 - NO)

您还可以更改

的逻辑
  
      
  • (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
  •   

if (range.length == 0) {
    if ([text isEqualToString:@"\n"]) {
        textView.text = [NSString stringWithFormat:@"%@\n\t",textView.text];
        return NO;
    }
}

在这种情况下,用户将点击键盘上的操作按钮(如“返回”)。 Textview将在文本中插入新行和附加标签。

我希望它会对你有所帮助。

答案 1 :(得分:0)

罪魁祸首是[textView resignFirstResponder];

你真的需要吗? - textView:shouldChangeTextInRange:replacementText:?如果没有,只需删除整个方法,转到下一行是按“完成”(默认情况下为“返回”)键的默认行为,它已由[textView resignFirstResponder];中的- textView:shouldChangeTextInRange:replacementText:修改。如果您这样做,至少需要删除[textView resignFirstResponder];以避免您的描述。

答案 2 :(得分:0)

swift 3,4

 func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        if text == text.trimmingCharacters(in: .newlines) {
            return true;
        }else{
            textView.resignFirstResponder()
            return false
        }
    }

答案 3 :(得分:0)

点击UITextView ios中的返回键插入新行

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    if textView == textViewForChat
    {


        if (text == "\n")
        {
            textView.text = textView.text + "\n"
            //textView.resignFirstResponder()

         }

     }
return true
}

答案 4 :(得分:0)

迅速5 更新

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    if (text == "\n") {
        textView.text = textView.text + "\n"
    }
    return true
}