各ビューでは、アプリが物理キーボード入力を処理できるようにする「KeyHandler」オブジェクトをインスタンス化します。iOS UITextField&NSTimer Oddity
オブジェクトがインスタンス化されると、最初のレスポンダとして機能する隠しtextFieldが作成されます。インスタンス化の際
次のコードが呼び出されます。
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(pollTextField:) userInfo:nil repeats: YES];
投票のテキストフィールドには、次のようになります。私は物理的なキーボード、self.textField.text上のuを押すと
-(void) pollTextField:(NSTimer*) timer{
NSString * str = self.textField.text;
NSString * lastChar;
if (!str || [str isEqualToString:@""]) {
//no new text
}else{
lastChar = [str substringFromIndex:[str length] - 1];
[self determineAction:lastChar];
lastChar = @"";
str = nil;
}
self.textField.text = @"";
}
== uは。しかし、textFieldはブランクにならず、@ ""に設定しています。 2回目のpollTextFieldはself.textField.text == uuと呼ばれ、3回目は== uで、キーを押さなくてもuとuuの間を循環します。もう1つの奇妙な点は、pollTextFieldが最初に呼び出されたときに、selfがまだKeyHandlerのインスタンスであり、まだ同じメモリアドレスを持っていても、selfが常に正しいインスタンス変数をすべて含むことです。
編集:ここで私は、TextFieldとkeyhandlerを作成しています方法は次のとおりです。
UITextField* textField = [[UITextField alloc] init];
[self.view addSubview:textField];
keyHandler = [[KeyHandler alloc] initWithTextField:textField];
keyHandler.delegate = self;
[textField release];
。私はtextFieldをビューのインスタンス変数にして、リリースコールを削除しました(ビューとキーハンドラの両方にtextFieldへの参照が必要です)。しかしそれは問題を解決しませんでした。 – LDK
私のソリューションは機能しませんでしたか? textFieldをクラスインスタンス変数にして、それが機能しないためには、やはりあなたに何をしたのかわかるようにコードを表示しなければなりません。 – Lefteris
残念ながら、それはしませんでした。週末なので、私の前に仕事のコードがないので、今週までこれを続けることはできません。 – LDK