Как обнаружить касание пользователя на Bluetooth-клавиатуре iPad

Я использую клавиатуру 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: - здесь есть строковый аргумент - все текущие символы, которые вы вводите, являются этой строкой - так что вы можете сделать сравнение без учета регистра - по отношению к этой строке и любому символу - 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. Для алфавитов - без учета регистра. Сравните: -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replaceString:(NSString *)string{ if([string isEqualToString:@#] ) { return NO; } иначе вернуть YES; } - person Ashwin G; 24.09.2012
comment
привет @Ashwin, я попробовал ваше предложение, но я использую UITextview, поэтому я пробую его в uitextviewdelegate. :(NSString *)string{ но он всегда назывался -(void)textViewDidChange:(UITextView *)textView, можете ли вы дать мне другое предложение? - person R. Dewi; 26.09.2012
comment
Убедитесь, что вы добавили uitextviewdelegate и также установили его. И метод делегата - (BOOL) textView: (UITextView *) textView shouldChangeTextInRange: (NSRange) range replaceText: (NSString *) text - person Ashwin G; 26.09.2012
comment
да, я все правильно написал, но у меня опечатка в моем последнем комментарии :) - person R. Dewi; 26.09.2012
comment
Итак, вы имеете в виду, что вы установили delgate и использовали указанный метод делегата, но проблема все еще существует? Если это так, загрузите код метода делегата - person Ashwin G; 26.09.2012