2013-08-14 1 views
3

То, что я пытаюсь реализовать, - это UITextField, который видит слова как символы. В частности, я пытаюсь увидеть математическое выражение sin (например, один символ). Я решил решить эту проблему, выполнив мой собственный UITextInputDelegate. Однако четыре требуемые функции из этого протокола никогда не вызываются при реализации или принятии этого протокола. пытался его реализации следующими способами:..Проблемы с реализацией протокола <UITextinputDelegate>

наследуя в UITextField

@interface BIDUItextFieldDelegate : UITextField <UITextInputDelegate> 

наследуя в NSObject

@interface BIDTextfieldInputDelegate : NSObject <UITextInputDelegate> 

соответствующий файл .m содержит:

@implementation BIDTextfieldInputDelegate 


- (void)selectionWillChange:(id <UITextInput>)textInput 
{ 
    NSLog(@"sWill"); 
} 

- (void)selectionDidChange:(id <UITextInput>)textInput 
{ 
    NSLog(@"sDid"); 
} 

- (void)textWillChange:(id <UITextInput>)textInput 
{ 
    NSLog(@"tWill"); 
} 

- (void)textDidChange:(id <UITextInput>)textInput 
{ 
    NSLog(@"tDid"); 
} 

, например, для второго подхода (через подклассов NSObject), я сделать следующее в (ID) метода инициализации в качестве дополнительного пользовательского класса UITextField, который отображается в приложении:

//textInputDel is an instance of the custom NSObject class that adopts the above UITextInputDelegate protocol 
self.textInputDel = [[BIDTextfieldInputDelegate alloc] init]; 

self.inputDelegate = self.textFieldDel; 

Кто-нибудь знает, что я делаю неправильно, или имеет лучшее решение?

+0

http://apptree.net/parser.htm Может помочь. –

+0

Спасибо за ваш быстрый комментарий, я использую DDmathparser. Разбор себя все работает отлично, но, например, можно удалить несколько символов одновременно или ограничить возможности вставки в фиксированных словах, это проблема, с которой я имею дело в настоящий момент. –

+0

Вы можете найти обходной путь для проблемы [здесь] (http://stackoverflow.com/questions/25158161/uitextinputdelegate-methods-not-functioning-correctly/27128185#27128185). – Daniel

ответ

2

UITextInputDelegate не является протоколом, который вы осуществить; скорее, система создает объект, соответствующий UITextInputDelegate, и назначает его как .inputDelegate Первого ответчика, который соответствует UITextInput.

Метода UITextInputDelegate являются методами вашего UITextInput соответствующих требований ответчика позвонить на вашем .inputDelegate сообщить ему, что вы изменили текст или выбор с помощью средств, отличных от ввода с клавиатурой.

+0

NM, я неправильно читал даты на этом посту и думал, что он обсуждает проблемы с расширениями клавиатуры, используя это. –