Не знаю, нужно ли вам знать это в сочетании с другим текстом или обнаруживать только однократное нажатие, но вот мое решение для обнаружения первого:
в моем случае это только одинсимвол внутри:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)inText
преобразует заглавный текст в строчный и устанавливает значение shiftPressed (игнорируется, если текст не является буквенным)
//Shift Detection
BOOL shiftPressed = NO;
//Detect non letter characters
NSCharacterSet *letterCharacterSet = [NSCharacterSet letterCharacterSet];
NSString *trimmedText = [text stringByTrimmingCharactersInSet:letterCharacterSet];
if ([text length] == 1) {
if (![trimmedText length])
{
NSString *upperCaseString = [text uppercaseString];
if ([upperCaseString isEqualToString:text]) {
NSString *lowerCaseString = [text lowercaseString];
text = lowerCaseString;
shiftPressed = YES;
}
}
}