以下に説明する問題の解決策: 私の問題は、Mavericks/Xcode 5.0.1 の更新で修正されました。これは SDK のバグのようです。
端末アプリでまったく同じ問題のように見えます-スペースを押すと(たとえば、で表示されているリモートサイトでテキストを読むmore
ために)、テキストフィールドにスペース文字がないため、範囲が立入禁止で。(これが発生するコードについては、以下を参照してください)
- (BOOL)textViewShouldEndEditing:(UITextView *)textView {
return NO;
}
これにより、テキストビューがフォーカスされ、押されたすべてのキーが処理されます。これは、キーボード文字を 1 つずつ取得して telnet クライアントに送信する私の方法です。
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
NSLog(@"—%@— is replacementText", text);
return YES;
}
xterminal[37918:c07] — — is replacementText
スペースがタップされるとすぐにわかります。問題を発見したとき、これはありませんでした.UITextViewによってスペースが表示されていることを確認するために追加されました.
- (void)textViewDidChange:(UITextView *)textView {
// determine whether the key was a backspace
if([textView.text isEqualToString:@""]) {
uint8_t bsValue = kTelnetCharBS;
[connection sendData:[NSData dataWithBytes:&bsValue length:1]];
} else {
NSLog(@"—%@— in output buffer", textView.text);
// Not a backspace, send all but the 'X'
NSRange allButX = NSMakeRange(1, 1);
[connection sendString:[textView.text substringWithRange:allButX]];
}
textView.text = @"X";
}
そうですかxterminal[37918:c07] —X— in output buffer
直後に墜落
[connection sendString:[textView.text substringWithRange:allButX]];
スペースがないかNSRange allButX = NSMakeRange(1, 1);
、他の印刷可能な文字と同じように問題ありません。
実装されている UITextView の他のデリゲート メソッドはありません。で作成されます
inputTextView = [[UITextView alloc] initWithFrame:CGRectZero];
そしてその直後
inputTextView.text = @"X";
inputTextView.delegate = self;
inputTextView.autocorrectionType = UITextAutocorrectionTypeNo;
[self.view addSubview:inputTextView];
[inputTextView becomeFirstResponder];
私のスペースはどこですか?
更新: UITextView がそのように動作する理由はまだわかりません。UITextField は私が望むように機能し、同じ方法で作成されました。UITextViewデリゲートメソッドを置き換えるために、textViewDidChange:
私はこれを使用しています:
[inputTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
それ以外は同じコード。