2010-08-21 3 views
7

Я делаю пользовательский метод ввода для iPad, я хочу, чтобы иметь возможность заменить системную клавиатуру на мой метод ввода и ввести текст с помощью этого метода ввода.UITextView inputView

В соответствии с документацией все, что мне нужно сделать, это установить свойство inputView с моим представлением, и оно будет использоваться вместо системной клавиатуры. Я сделал это, и он работает, пока показывает клавиатуру, но как я действительно ввожу текст в текстовое представление?

Предположительно текстовое представление должно принять UIKeyInput, и я могу использовать методы протокола для ввода текста, но на самом деле UITextView не принимает этот протокол. conformsToProtocol:@protocol(UIKeyInput) возвращает NO и «deleteBackwards» не реализован (insertText и hasText реализованы. Кроме того, «insertText» не вызывает метод делегирования textViewDidChange:. Очевидно, мне нужно отправить метод UIKeyInput на какой-либо другой объект (редактор поля?), но как я могу его получить?

есть идеи?

ответ

5

Предполагая, что клавиатура имеет несколько кнопок, почему не может вам просто установить селектор для ключей, и добавляет к тексту TextViews, когда каждая кнопка щелкнул, я сделал это, он отлично работает ... Вот метод, который на самом деле выполняет «запись» в UITextView, этот метод является частью настраиваемого протокола, определяемого inputView, и вызывается делегатом всякий раз, когда кнопка является нажатием d, надеюсь, что это поможет, обратите внимание: я отправляю ret, когда клавиша возврата нажата и < - когда нажата кнопка backspace.

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

Спасибо. Эти решения хороши, но я хотел бы, чтобы текстовое представление действительно выполняло редактирование (и вел себя нормально, в комплекте с автокоррекцией и т. Д.), А не редактировало сам текст. –

+7

Я назвал DTS об этом, и кажется, что ваше решение действительно единственный вариант. Их ответ заключался в том, что UIKeyInput (и UITextInput) не для клиента (то есть вы не должны когда-либо вызывать эти методы самостоятельно), а только для представлений, которые хотят получать ввод с клавиатуры. –

Смежные вопросы