我有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?},
});
有什么办法吗?我是否需要实现任何其他语音输入方法才能正常工作。
希望你能理解这个问题。 提前致谢
答案 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
}
}