UITextView成为第一响应者时添加新行

时间:2014-01-30 22:24:38

标签: ios uitextfield uitextview

所以我有一个UITextField,它是页面打开时的第一个响应者(工作正常)。然后我有一个UITextView,它成为用户按下返回时的第一个响应者,这就是我的问题所在。当按下返回的东西似乎与第一响应者一起正常工作,但UITextView添加一行并开始在第二行闪烁的光标..有没有人可以帮助我?提前谢谢!

这是开关

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    [self.fieldDescription.textView becomeFirstResponder];

    return YES;
}

查看图标闪烁的位置?当第一个响应者改变时,这就是它开始的地方...... enter image description here

4 个答案:

答案 0 :(得分:15)

很棒的问题和描述。我遇到了同样的问题。

这个帖子没有答案为我解决了。有人在another thread的评论(@AndreiRadulescu)中添加了一个链接。 @rmaddy在该线程上的回答解决了它。他的回答是:

  

解决此问题的一个解决方案是实施   textFieldShouldReturn:委托方法,请务必返回NO,而不是   是。通过返回NO,换行符不会传递到文本字段。

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
// move to next field or whatever you need
[myTextView becomeFirstResponder];

return NO;
}

在斯威夫特:

//Dismisses keyboard upon tapping the return key
func textFieldShouldReturn(textField: UITextField) -> Bool {
    txtTask.resignFirstResponder()
    return false
}

答案 1 :(得分:2)

TextView有一个委托方法,用于检查用户输入的字符

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

使用此功能可以停止新行并返回键盘,请参阅下面的代码

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

答案 2 :(得分:1)

尝试使用此

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    [self.fieldDescription becomeFirstResponder];
}

而不是

- (BOOL)textFieldShouldReturn:(UITextField *)textField;

textFieldShouldReturn - >自动辞职第一响应者

答案 3 :(得分:0)

我的情况,我只是在textViewShouldBeginEditing

时设置了一个空白文本
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
    self.myTextView.text =@"";

    return YES;
}