如何通过语音输入文本时限制文本字段中的文本

时间:2016-01-13 05:51:24

标签: ios objective-c uitextfield

我有3个文本字段,并且我使用UITextFeildDelegate方法将每个文本字段的字符限制限制为50,并且它工作正常。现在,当我尝试通过语音而不是键盘输入文本时,文本字段似乎接受了超过50个字符,并且在语音输入完成时整个文本消失了一段时间。

这是我的委托方法if(textField==self.optionATextField || textField==self.optionBTextField ||textField==self.optionCTextField) { if(range.length + range.location > textField.text.length) { return NO; } NSUInteger newLength = [textField.text length] + [string length] - range.length; return newLength <= 50; }

$.ajax({
        url: "/api/comment/",
        type: "POST",
        datatype: "json",
        data:  {"reply_id": "1", csrfmiddlewaretoken: "{{ csrf_token }}", and token here?},
});

有什么办法吗?我是否需要实现任何其他语音输入方法才能正常工作。

希望你能理解这个问题。 提前致谢

3 个答案:

答案 0 :(得分:0)

shouldChangeCharactersInRange,当用户使用听写(语音转文本)功能时,不会调用覆盖方法。 您可以做的是,(此示例在C#(Xamarin iOS)上进行)

1。使用:

textField.EditingChanged += textField_EditingChanged;

2。在下面的方法实现下面, maxLength:searchBar文本字段的最大长度

private void textField_EditingChanged(object sender, EventArgs e)
{
   var textField = sender as UITextField;
   var maxLengthSubstractionValue = textField.Text.Length.CompareTo(maxLength);
      if(maxLengthSubstractionValue == 1)
         {
           textField.Text =  textField.Text.Substring(0, Math.Min(maxLength, textField.Text.Length));
         }
 }

答案 1 :(得分:0)

要实现此功能,您必须使用textViewDidChange委托方法。

- (void)textViewDidChange:(UITextView *)textView { 
    if (textView.text.length > kMaxCharAllowed) {
        textView.text = [textView.text substringToIndex:kMaxCharAllowed];
    }
}

只要文本字段字符串发生变化,就会调用此方法。如果文本比期望的长度长,我们将其替换为期望长度的字符串。

与此相关,请使用- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text方法来处理键盘输入。

答案 2 :(得分:-1)

假设您希望将输入的文本截断为最多50个字符(无论输入方法如何),您可以执行以下操作:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if(textField==self.optionATextField || textField==self.optionBTextField ||textField==self.optionCTextField) {
        NSString *newText = [textField.text stringByReplacingCharactersInRange:range withString:string];
        if (newText.length < 50) {
            // Text length is still OK, let it through
            return YES;
        } else {
            // The new text is too long - truncate and set the shorter value
            newText = [newText substringToIndex:50];
            textField.text = newText;

            return NO;
        }
    } else {
        return YES; // do whatever you need here
    }
}