2010-08-21 21 views
7

Tôi đang tạo phương thức nhập tùy chỉnh cho iPad, tôi muốn có thể thay thế bàn phím hệ thống bằng phương thức nhập và nhập văn bản qua phương thức nhập đó.Đầu vào UITextViewView

Theo tài liệu, tất cả những gì tôi cần làm là đặt thuộc tính inputView với chế độ xem của tôi và nó sẽ được sử dụng thay cho bàn phím hệ thống. Tôi đã làm điều đó và nó hoạt động, như xa như hiển thị bàn phím nhưng làm thế nào để tôi thực sự nhập văn bản vào xem văn bản?

Giả sử chế độ xem văn bản cần áp dụng UIKeyInput và tôi có thể sử dụng các phương thức của giao thức để nhập văn bản nhưng thực tế UITextView không áp dụng giao thức này. conformsToProtocol:@protocol(UIKeyInput) trả về NO và "deleteBackwards" không được triển khai (insertText và hasText được triển khai. Ngoài ra, "insertText" không gây ra phương thức ủy nhiệm textViewDidChange: để được gọi. Rõ ràng là tôi cần gửi phương thức UIKeyInput cho một số đối tượng khác (một trình soạn thảo lĩnh vực?) nhưng làm thế nào để có được nó?

Bất kỳ ý tưởng?

Trả lời

5

Giả sử bàn phím của bạn có một số nút, tại sao không thể bạn chỉ cần thiết lập một chọn cho các phím của bạn, và thêm vào văn bản TextView khi mỗi nút Đây là phương thức thực sự thực hiện "viết" cho UITextView, phương thức này là một phần của một giao thức tùy chỉnh được định nghĩa bởi inputView và được gọi trên đại biểu mỗi khi một nút là định vị d, hy vọng nó giúp, lưu ý: tôi gửi ret khi phím return được đẩy và < - khi backspace được đẩy.

-(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

Cảm ơn. Giải pháp này là tốt đẹp nhưng tôi muốn xem văn bản để thực sự làm việc chỉnh sửa (và cư xử bình thường, hoàn thành với tự động và vv) và không chỉnh sửa văn bản bản thân mình. –

+7

Tôi gọi DTS về điều này và có vẻ như giải pháp của bạn thực sự là lựa chọn duy nhất. Câu trả lời của họ là UIKeyInput (và UITextInput) không dành cho khách hàng (nghĩa là, bạn không được phép tự mình gọi các phương thức này) nhưng chỉ cho các khung nhìn muốn nhận đầu vào bàn phím. –