在每个视图中,我实例化一个“KeyHandler”对象,该对象使应用程序能够处理物理键盘输入。iOS UITextField&NSTimer Oddity
当对象被实例化时,它创建一个隐藏的textField作为第一响应者。
在实例化下面的代码被称为:
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(pollTextField:) userInfo:nil repeats: YES];
投票文本字段的样子:
-(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在物理键盘上,self.textField.text ==ü。但是,textField不会变成空白 - 即使我将其设置为@“”。第二次pollTextField被称为self.textField.text == uu,它是第三次== u并且它在u和uu之间循环,即使我没有按任何键。另一个奇怪的是,第一次pollTextField被称为self总是包含所有正确的实例变量,下次调用它们时,即使self仍然是一个KeyHandler实例,并且仍然具有相同的内存地址。
编辑:这就是我如何创建文本框和keyhandler:
UITextField* textField = [[UITextField alloc] init];
[self.view addSubview:textField];
keyHandler = [[KeyHandler alloc] initWithTextField:textField];
keyHandler.delegate = self;
[textField release];
pollTextField是KeyHandler内虽然。我为textField创建了视图的实例变量并删除了释放调用(因此视图和keyhandler都应该有对textField的引用)。但这并没有解决问题。 – LDK
我的解决方案没有工作吗?至于使textField成为一个类实例变量,并为它不工作,再次你必须告诉我们一些代码,所以我们可以知道你做了什么。 – Lefteris
不幸的是,它没有。由于这是周末,我没有工作代码在我面前,所以直到本周才能继续。 – LDK