2010-08-21 68 views
7

我正在为iPad定制输入法,我希望能够用我的输入法替换系统键盘并通过该输入法输入文本。UITextView输入查看

根据文档,我需要做的就是用我的视图设置inputView属性,它将被用来代替系统键盘。我做到了这一点,它的工作原理,只要显示键盘,但我怎么实际上输入文本到文本视图?

假设文本视图需要采用UIKeyInput,我可以使用协议的方法来输入文本,但实际上UITextView并不采用这种协议。 conformsToProtocol:@protocol(UIKeyInput)返回NO并且没有实现“deleteBackwards”(insertText和hasText被实现,除此之外,“insertText”不会导致textViewDidChange:委托方法被调用。很明显,我需要发送UIKeyInput方法到其他对象一个字段编辑器?),但我怎么得到它呢?

任何想法?

回答

5

假设你的键盘有一些按钮,为什么不能你刚才设置选择为你的钥匙,而当每个按钮追加到textViews文本被点击了,我已经完成了它,它工作正常...这是实际做“写”到UITextView的方法,这个方法是由inputView定义的自定义协议的一部分,每当一个按钮时调用委托是presse d,希望它有帮助,注意:当按下返回键时,我提交ret,当按下退格键时<。

-(void)userDidInputString:(NSString*)s 
{ 
    NSRange r=padView.textView.selectedRange; 
    if([s isEqualToString:@"ret"]) 
     [email protected]"\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]; 


      } 


} 
+0

谢谢。这个解决方案很好,但我希望文本视图能够实际进行编辑(并且正常运行,完成自动更正等等),而不是自己编辑文本。 – 2010-08-22 11:40:30

+7

我打电话给DTS,看来你的解决方案确实是唯一的选择。他们的答案是,UIKeyInput(和UITextInput)不适用于客户端(也就是说,你不应该自己调用这些方法),而只能用于希望接收键盘输入的视图。 – 2010-08-25 22:33:53