当前项目在cocos2d v2下运行。
我在CCLayer中添加了一个简单的UITextField。
每当用户触摸textField时,就会出现一个键盘。
然后当用户触摸"返回"按钮,键盘消失并清除输入。
我尝试做的是当用户触摸UITextField之外的任何地方时做同样的事情。
我确实找到了一种方法并且有效:
- (void)ccTouchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
UITouch* touch = [touches anyObject];
if(touch.view.tag != kTAGTextField){
[[[[CCDirector sharedDirector] view] viewWithTag:kTAGTextField] resignFirstResponder];
}
}
但是,此方法不会调用该函数:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
我使用此功能进行一些计算并清除输入。因此,我希望ccTouchesBegan在文本字段为" resignFirstResponder"。
时输入此textFieldShouldReturn。答案 0 :(得分:3)
<强> textFieldShouldReturn:强> 询问代表是否文本字段应该按下返回按钮。
所以只有当用户点击返回按钮时才会调用它。
我宁愿创建一个计算和输入清除的方法,并在您希望它被调用时调用该方法。例如:
- (void)calculateAndClearInput {
// Do some calculations and clear the input.
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
// Call your calculation and clearing method.
[self calculateAndClearInput];
return YES;
}
- (void)ccTouchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
UITouch* touch = [touches anyObject];
if (touch.view.tag != kTAGTextField) {
[[[[CCDirector sharedDirector] view] viewWithTag:kTAGTextField] resignFirstResponder];
// Call it here as well.
[self calculateAndClearInput];
}
}
答案 1 :(得分:1)
正如@matsr建议的那样,您应该考虑重新组织您的程序逻辑。 UITextField上的resignFirstResponder
调用textFieldShouldReturn:(UITextField *)textField
没有意义,因为通常会从该方法中调用resignFirstResponder。此外,您不应尝试以编程方式调用textFieldShouldReturn
。
相反,我建议将您的计算代码移动到控制器/中的新方法中,并在textFieldShouldReturn
和在UITextField上调用resignFirstResponder
的触摸时调用它们。
这也有助于实现事件处理代码与计算/逻辑代码的分离。