2010-08-21 66 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