需要帮助将光标移动到UITextView Obj C中的起始位置

时间:2017-07-24 06:33:31

标签: ios objective-c uitextview

我一直试图解决这个问题几天。我将不胜感激任何帮助。如果它对您有所影响,那么我的应用程序是免费的,并且被许多失去了自己说话能力的人使用。

该应用程序是文本到语音。我正在实现一个功能,如果他们键入文本,然后点击Return键,将发生以下情况:

  • 将自动说出文字
  • 文本将保存到临时位置,以防他们必须重复他们所说的内容
  • 屏幕将被清除并显示撤消按钮,因此如果需要(重复),他们可以将文本添加回textView。

我遇到的问题是当按下Return键时,光标向下移动一行。我认为有一个明确的textView并且光标向下一行(下面的图片)看起来很奇怪。其余的工作,甚至撤消功能。我已经尝试了很多建议,我在这里以编程方式移动光标,似乎没有任何工作。

以下是我用于执行上述步骤的代码。任何建议表示赞赏。

    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if ([text isEqualToString:@"\n"]) {
        [self speakText];
        self.clearedText = self.textView.text;
        self.undoReady = YES;
        [self.clearButton setTitle:@"Undo" forState:UIControlStateNormal];
        self.textView.text = @"";
        [WANT TO MOVE CURSOR TO BEGINNING POSITION];
    }
}

enter image description here

5 个答案:

答案 0 :(得分:3)

这对我来说很好。

JSON.stringify(json_data);

只要您想将textview位置设置为开始,就可以使用此代码。

如果您希望光标在一个字母后面开始,请将范围更改为--inspect

答案 1 :(得分:0)

试试这个 -

textField.selectedTextRange = [textField
        textRangeFromPosition:textField.beginningOfDocument
        toPosition:textField.beginningOfDocument];

答案 2 :(得分:0)

使用textfield的委托方法

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {}

字符串为您提供按下的键字符。

在方法内检查回车/输入。

if ([string isEqualToString:@"\n"]) { }

然后在你的代码清除文本字段并将光标移动到下面的代码开头的“If语句”里面。

//Your code
self.txtView.text = @"";
textField.selectedTextRange = [textField textRangeFromPosition:textField.beginningOfDocument toPosition:textField.beginningOfDocument];

希望这会有所帮助。如果对你有所帮助,不要忘记接受答案。

答案 3 :(得分:0)

1) First Add UITextViewDelegate -

@interface SecondViewController : UIViewController<UITextViewDelegate>

2) To move the Cursor to the beginning position, use the Delegate method of TextView -

- (void)textViewDidBeginEditing:(UITextView *)textView {
    dispatch_async(dispatch_get_main_queue(), ^{
        textView.selectedRange = NSMakeRange(0, 0);
    });
}

答案 4 :(得分:0)

UITextField符合UITextInput协议,该协议提供的方法可让您控制所选范围

-(void)textFieldDidBeginEditing:(UITextField *)textField {
    textField.selectedTextRange = [textField
        textRangeFromPosition:textField.beginningOfDocument
        toPosition:textField.beginningOfDocument];
}