Как да откриете потребителско докосване на iPad Bluetooth клавиатура

Използвам bluetooth клавиатура, за да се свържа с моето приложение в iPad. Използвам го за писане на UITextView или UITextField. И сега трябва да открия дали потребителят докосва бутона Command + Z от тази bluetooth клавиатура. Това някакво събитие на известие ли е, за да се открие това? Прочетох това NSEvent addGlobalMonitorForEventsMatchingMask: Hotkey Intercepting използва NSEvent, но не мисля, че мога да използвам в приложението за iPad. Може ли някой да ме насочи какво трябва да направя?

Благодаря ти :)


person R. Dewi    schedule 20.09.2012    source източник
comment
Имате ли подходящо решение за това?   -  person βhargavḯ    schedule 13.05.2013


Отговори (1)


отличен въпрос - имах този огромен проблем в моя скорошен проект. Има два метода, които ще реагират по различен начин, когато използвате bluetooth клавиатура и вградена клавиатура - uikeyboardwillshownotification и uikeybaordwillhidenotification. Запазете някои nslogs в тези методи и вижте отговора. Другият начин е да видите размера на рамката на клавиатурата, когато вашето текстово поле започне да се редактира - textfielddidbeginediting - опитайте да видите рамката на клавиатурата - bluetooth ще има височина нула - като използвате това, можете да разрешите проблема си

person Ashwin G    schedule 22.09.2012
comment
ако трябва просто да осъзнаете докосването на клавиша cmd + z - тогава има метод за делегиране на текстово поле - textField:shouldChangeCharactersInRange:replacementString: - тук има аргумент за низ - всички текущи символи, които въвеждате, са този низ - така че можете да направите caseinsensitivecompare - по отношение на този низ и който и да е символ - z или cmd ключ и съответно поставете валидациите си - person Ashwin G; 22.09.2012
comment
благодаря ви за отговора, можете ли да ми дадете примерен код, за да направя сравнение без чувствителност към регистър? - person R. Dewi; 24.09.2012
comment
Това е кодът, в който сравнявам заглавие на анотация с текущото местоположение - ([annotation.title caseInsensitiveCompare:@Current Location] == NSOrderedSame) - person Ashwin G; 24.09.2012
comment
Това е методът на делегиране за проверка на един символ. Тук не позволявам на потребителя да въвежда #. По същия начин можете да поставите CMD или z. За азбуки - caseinsensitivecompare: -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ if([string isEqualToString:@#] ) { return NO; } else return YES; } - person Ashwin G; 24.09.2012
comment
здравей @Ashwin, опитах твоето предложение, но използвам UITextview, така че го пробвам в uitextviewdelegate..когато натисна CMD + z, никога не се извика -(BOOL)textView:(UITextView *)textView shouldChangeCharactersInRange:(NSRange)range replacementString :(NSString *)string{, но винаги се наричаше -(void)textViewDidChange:(UITextView *)textView, можете ли да ми дадете друго предложение? - person R. Dewi; 26.09.2012
comment
Уверете се, че сте добавили uitextviewdelegate и го задайте също. А методът на делегиране е - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText: (NSString *)text - person Ashwin G; 26.09.2012
comment
да, направих го правилно, но имам правописна грешка в последния ми коментар :) - person R. Dewi; 26.09.2012
comment
Значи имате предвид, че сте задали делегата и сте използвали указания метод на делегиране и все още имате проблема? Ако е така, качете кода на метода на делегата - person Ashwin G; 26.09.2012