UISearchBar我目前面临与听写支持相关的问题。当搜索栏的文本发生变化时,我必须触发一些过滤器逻辑。必须通过键盘输入或听写来触发此逻辑。
现在这是我的问题:如果我在搜索栏中结束听写,textDidChange则会立即触发该方法(当语音识别正在运行时)。识别完成后,使用正确的字符串再次触发该方法。
如何检测该方法的第一次调用是由语音识别开始触发的?因为在这种情况下我必须避免执行我的逻辑。
\n\n我已经尝试检查searchText传递给该方法的参数。但结果有点可疑。
如果我将此代码添加到searchBar:textDidChange:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText\n{\n NSLog(@"SearchText [%@] - SearchTextLength [%i] - SearchTextEquals [%i]", searchText, searchText.length, [searchText isEqualToString:@""]);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我得到这个日志结果:
\n\nSearchText [\xef\xbf\xbc] - SearchTextLength [1] - SearchTextEquals [0]\nRun Code Online (Sandbox Code Playgroud)\n\n我被困在这一点上。怎么可能searchText是[](空)但长度为1?还有其他方法可以检测语音识别仍在运行吗?
我遇到了同样的问题:检测语音听写仍在运行并处理语音输入。
正如您所描述的那样:从textDidChange中您得到一个长度为 1 的空NSString
就我而言,我的解决方案是获取文本的第一个字符(如果可用)并检查它的整数值。显然,“处理语音输入”的值始终是-17,
我知道这不是一个完美的解决方案,但它确实有效。如果有人有更好的解决方案,请分享:)
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
BOOL atLeastOneChar = searchText.length > 0;
BOOL speechRecognitionOngoing;
if (atLeastOneChar) {
// Checking if the user used the dictation feature.
// A char of value -17 is always returned as text while processing the voice.
// So if the first char is == -17 it means the dictationg is going on.
const char firstChar = *text.UTF8String;
NSInteger processingDictationSpeechChar = -17;
if (firstChar == processingDictationSpeechChar) {
// --> speech recognition is ongoing!
speechRecognitionOngoing = YES;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2383 次 |
| 最近记录: |