我正在为我的 Input Method Kit 输入法创建一个 IMKCandidate 候选窗口:
https://developer.apple.com/library/mac/documentation/Cocoa/Reference/IMKCandidates_Class/
然后,您需要覆盖 IMKInputController 方法 CandidateSelectionChanged: 和 CandidateSelected: 以及在您的委托对象中实现候选者方法。IMKInputController 子类通过实现 Candidate 方法为 IMKCandidates 对象提供候选项。当您准备好显示候选人窗口时,调用候选人方法来更新候选人并显示候选人窗口。
我已经实现了 IMKInputControllercandidates:
方法来提供候选数组。这很好用。
- (NSArray *)candidates:(id)sender {
return @[@"`candidates:` method", @"This works great!"];
}
但我注意到setCandidateData:
添加了一个方法来设置候选字符串,作为依赖委托方法的替代方法。这在我的输入法中会更方便。
@abstract 直接设置候选人数据,而不是通过
[IMKInputContoller candidates:]
.
-(void)setCandidateData:(NSArray*)candidatesArray AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER;
所以我注释掉该candidates:
方法,并setCandidateData:
改用:
[candidates setCandidateData:@[@"`setCandidateData:` method", @"Doesn't work :("]];
[candidates show:kIMKLocateCandidatesBelowHint];
但是,以这种方式执行此操作时,不会显示候选窗口:
我也通过控制台看到了这个错误:
CandidateWindowNoCandidatesException:IMKCandidates 显示:无法获取候选字符串。
文档看起来很清楚,setCandidateData:
可以用来代替candidates:
. 那么为什么不显示候选人呢?