在UITextView中检测/获取通知Shift键(修饰键)是否按下

5

我正在尝试找出是否有任何方法可以检测到 shift 键是否被按下,或者当在 UIKeyboard 中按下 shift 键时是否发送任何通知。

- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)string

由于shift键是一个修改键,因此不会调用它。

现在可以通过覆盖 pressesBegan: 来实现:https://dev59.com/UXgPtIcB2Jgan1znXWcs#73284986 - McKinley
1个回答

2

不确定您是需要将其与其他文本结合起来使用还是仅检测单个移位键,但这是我检测前者的解决方案:

在我的情况下,这只是一个字符:

- (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;
        }
    }
}  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接