首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用UITextChecker - Xcode/iPhone时遇到麻烦

在使用UITextChecker - Xcode/iPhone时遇到麻烦
EN

Stack Overflow用户
提问于 2011-03-17 09:09:57
回答 5查看 2.7K关注 0票数 1

我一直在尝试使用UITextChecker来查看字符串中的单词是否实际上是一个单词。我已经使用我在网上找到的示例将代码拼凑在一起,但我并不真正理解它,而且它有点超出了我的水平。有人能帮我找出如何检查字符串中的单词是否真的是单词吗?我还在学习这一切,所以非常感谢!

代码语言:javascript
复制
-(IBAction)pushButton:(id)sender{
label.text = textField.text;
NSString * currentWord;
currentWord = label.text;
NSRange range = NSMakeRange(0, 0);
range = [textChecker rangeOfMisspelledWordInString:[currentWord lowercaseString] 
                                             range:NSMakeRange(0, [currentWord length]) 
                                        startingAt:0 
                                              wrap:NO 
                                          language:@"en_US"];
if (range.location == NSNotFound) {
    NSLog(@"Word found");
}
    else {
        NSLog(@"Word not found");
    }

}

更新:我仍然有这个问题,因为我的日志显示"Word not found“,无论我在文本字段中输入什么内容。我也想发布我的.h文件,看看是否有不正确的地方。这里还有一个链接,可以链接到我获得原始代码的地方,以防有帮助。再次感谢。

代码语言:javascript
复制
 #import <UIKit/UIKit.h>
#import <UIKit/UITextChecker.h>

@interface CheckIfWordViewController : UIViewController {
    IBOutlet UILabel * label;
    IBOutlet UITextField * textField;
    IBOutlet UIButton * button;
    UITextChecker * textChecker;
}
@property (retain, nonatomic) UITextChecker * textChecker;
@property (retain, nonatomic) UIButton * button;
@property (retain, nonatomic) UILabel * label;
@property (retain, nonatomic) UITextField * textField;


-(IBAction)pushButton:(id)sender;

@end
EN

回答 5

Stack Overflow用户

发布于 2012-01-01 05:09:06

我被UITextChecker发现总是返回NSNotFound,即使是拼写错误的单词,因为我只给它提供大写的单词。通过提交currentWord lowercaseString解决了菜鸟的一个小问题。我还通过研究发现,超过25个字符的单词也会返回NSNotFound,而不管拼写是否错误。

票数 4
EN

Stack Overflow用户

发布于 2011-03-17 09:35:51

您的代码看起来像是向rangeOfMisspelledWordInString传递了一个单词--我认为您希望使用整个字符串并使用返回的NSRange来确定UITextChecker认为哪个单词拼写错误。因此,不传递currentWord,而是传递整个字符串。如果没有任何拼写错误,则会在计算时得到range.location == NSNotFound

单词检查的效果取决于您所检查的字典。我相信是Don Knuth发明了这种检查单词的方法:

  1. 获取字典的副本,并对所有条目进行排序,以便排序的单词索引与未排序的单词索引匹配。
  2. Sort candidate word
  3. Find Sort candidate word in sorted dictionary
  4. Index (可能有多个) of match is your word。

在您的例子中,您只关心是否有零个匹配。如果至少有一个匹配,则表示有一个有效的单词。

我不知道UITextChecker到底用的是什么字典,但没有什么比拒绝一个正确的单词更让人恼火的了。尤其是如果他们认为自己的话有点晦涩难懂,而且他们自己很聪明地使用了它。使用一个包罗万象的字典,比如官方的拼字游戏参考,就可以避免这个问题。

票数 0
EN

Stack Overflow用户

发布于 2011-03-17 09:55:15

你的代码看起来是正确的,我猜从你的问题中你想要它被解释?

代码语言:javascript
复制
    label.text = textField.text;

这一行接受在textField (假定为UITextField)中输入的文本,并将其分配给label (假定为UILabel)的text属性。它与拼写检查本身没有任何关系。

代码语言:javascript
复制
    NSString * currentWord;
    currentWord = label.text;

这会将文本字符串复制回标签的text属性。

代码语言:javascript
复制
    NSRange range = NSMakeRange(0, 0);

这将声明一个NSRange结构,并将其初始化为空值。没有必要,因为下一行将会改变它。

代码语言:javascript
复制
    range = [textChecker rangeOfMisspelledWordInString:[currentWord lowercaseString] 
                                                 range:NSMakeRange(0, [currentWord length]) 
                                            startingAt:0 
                                                  wrap:NO 
                                              language:@"en_US"];

这是实际执行工作的行。

  • 您正在搜索前面的文本字符串中的拼写错误的单词。它小写了它,我不知道这是不是严格地指定了整个字符串(从字符0到字符串的长度)应该是,searched.
  • startingAt:0指定它应该从范围的开头开始。在循环中使用它,在找到第一个拼写错误的单词后,告诉它从单词末尾开始查找another.
  • wrap:NO告诉它,如果拼写错误的单词,不要从范围的开头重新开始。不要紧的是,here.
  • `language:@"en_US“告诉它使用内置的美国英语词典。

似乎没有任何方法可以指定自定义字典BTW。

代码语言:javascript
复制
    if (range.location == NSNotFound) {
        NSLog(@"Word found");
    }
    else {
        NSLog(@"Word not found");
    }

这只是检查结果。如果发现拼写错误的单词,range.location将是单词的开头,range.length将是长度。如果所有单词都拼写正确,则range.location将为NSNotFound,range.length将为0。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5333723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档