2014-07-06 17 views
40

Özel bir klavye yapıyorum ve şu delege yöntemlerini InputViewController benim uygulamıyorum.
Ama hep olsun _textInput = nil_null nesnesi iOS8'de temsilci yöntemleri - özel klavyeler

- (void)textWillChange:(id<UITextInput>)textInput 
- (void)textDidChange:(id<UITextInput>)textInput 
- (void) selectionWillChange:(id<UITextInput>)textInput 
- (void) selectionDidChange:(id<UITextInput>)textInput 

herkes bunu düzeltmek için nasıl biliyor mu?
Bir sebepten dolayı nil mu?
Tek başıma bir şey mi uygulamalıyım?

+0

Apple'ın API'sı, yalnızca "textInput" UITextInput protokolünü benimseyen belge örneği. "_ Tam olarak yararlı değil. Apple'ın bunun için herhangi bir örnek kodu var mı? Bunun etrafında çok fazla sis var. – bauerMusic

+0

Artık beta 6 ile, 'textInput' üzerindeki herhangi bir çağrı klavyenin çökmesine neden oluyor. – bauerMusic

+0

@bauerMusic self.textDocumentProxy'yi çağırıyor musunuz? Hangi textInput demek istiyorsun? – nurxyz

cevap

2

İyi soru. Ancak, UITextInputDelegate'un sizin için uygulamasının uygulandığı bir protokol değildir. Elma Dokümanlar itibaren

Lower Level Text-Handling Technologies başlıklı:

değişiklikler nedeniyle dış metin görünümünde meydana nedenlerden-onlar metin girişi yapılan aramalar neden değildir olduğu sistemde-UITextInput nesne olmalıdır textWillChange:, textDidChange:, selectionWillChange: ve selectionDidChange: iletilerinin temsilcisine (referansta bulunduğu) bir mesaj gönderin. Örneğin, kullanıcıların bir metin görünümü dokunun ve parmak altında ekleme noktasını yerleştirmek için seçilen metnin aralığını ayarlamak, seçili aralığı değiştirmeden önce selectionWillChange: göndereceği ve aralığını değiştirmek sonra selectionDidChange: göndermek .

Ve docs den UITextInputDelegate üzerinde

:

UIKit o sınıf benimser UITextInput protokol nesnesinin inputDelegate özelliğine zamanında atar özel metin girişi temsilci sağlar.

yukarıda ima biz bu temsilci yöntemleri uygulamak değil olmasıdır; Metin veya seçiminizi klavye girişi dışındaki yollarla değiştirdiğinize dair inputDelegate numaralı telefonu bilgilendirmek için kullanıyoruz. Daha fazla örnek here ile

- (void)delete:(id)sender; 
{ 
    if (selection && ![selection isEmpty]) { 
     [inputDelegate textWillChange:self]; 
     [inputDelegate selectionWillChange:self]; 
     [self replaceRange:selection withText:@""]; 
     [inputDelegate selectionDidChange:self]; 
     [inputDelegate textDidChange:self]; 
    } 
} 

örnek kod:

Aşağıda, bu gösteren bir example yöntemdir.

İlgili konular