我正在为iPad制作自定义输入法,我希望能够用我的输入法替换系统键盘,并通过该输入法输入文字。
根据文档,我需要做的就是用我的视图设置inputView属性,它将被用来代替系统键盘。我这样做了,它可以工作,只要显示键盘,但我如何在文本视图中实际输入文字?
据说文本视图需要采用UIKeyInput,我可以使用协议的方法输入文本,但实际上UITextView不采用这个协议。 conformsToProtocol:@protocol(UIKeyInput)
返回NO并且未实现“deleteBackwards”(insertText和hasText已实现。除此之外,“insertText”不会导致调用textViewDidChange:
委托方法。显然我需要发送其他对象(字段编辑器?)的UIKeyInput
方法,但我该如何获得它?
有什么想法吗?
答案 0 :(得分:6)
假设你的键盘有一些按钮,为什么你不能只为你的键设置一个选择器,并在点击每个按钮时附加到textViews文本,我已经做到这一点它工作正常......这是实际的方法对UITextView进行“写入”操作时,此方法是inputView定义的自定义协议的一部分,每当按下按钮时都会在代理上调用,希望它有所帮助,注意:我在按下返回键时提交ret并且< ; - 按下退格键时。
-(void)userDidInputString:(NSString*)s
{
NSRange r=padView.textView.selectedRange;
if([s isEqualToString:@"ret"])
s=@"\n";
if([s isEqualToString:@"<-"])
{
NSString *text=padView.textView.text;
if(r.location>0)
{
r.location=r.location-1;
r.length+=1;
}
[padView.textView setScrollEnabled:YES];
padView.textView.text=[text stringByReplacingCharactersInRange:r withString:@""];
[padView.textView setScrollEnabled:NO];
r.length=0;
[padView.textView setSelectedRange:r];
[note setNoteText:padView.textView.text];
}
else {
NSString *text=padView.textView.text;
[padView.textView setScrollEnabled:YES];
padView.textView.text=[text stringByReplacingCharactersInRange:r withString:s];
[padView.textView setScrollEnabled:NO];
r.location=r.location+[s length];
//whenever you modify the text by setting the UITextViews text property it resets the cursor to the end of the text view, we have this line below to go back to where the user left off
[padView.textView setSelectedRange:r];
}
}