【发布时间】:2011-12-12 19:38:30
【问题描述】:
我将视图控制器呈现为模态。这个视图控制器有几个通过 IB 连接的 UITextFields。
我的问题是当按下返回键时,委托方法被调用,但由于某种原因,在给定的 textField 上调用 resignFirstResponder 不是。即使我在 textFieldShouldReturn 委托方法中向控制台打印一条消息,它也会被打印出来,但它只会拒绝调用 resign 方法。
在 shouldReturn 委托方法中我只有:
-(BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
这真的从来没有发生在我身上,它只是不会resignFirstResponder。正如我之前提到的,我可以向控制台打印,只是为了验证 shouldReturn 方法是否被调用。
我也试过这个只是为了看看是否设置了委托,它确实改变了 UITextField 的行为。
-(void)textFieldDidBeginEditing:(UITextField *)textField {
[textField setTextAlignment:UITextAlignmentCenter];
}
这个问题真的让我很困惑。即使我尝试直接在文本字段上调用 resignFirstResponder,它也不会关闭键盘。
-(BOOL)textFieldShouldReturn:(UITextField *)textField {
if ([textField isEqual:self.productTextField]) {
NSLog(@"Product textfield");
[self.productTextField resignFirstResponder];
} else if ([textField isEqual:self.quantityTextField]) {
NSLog(@"Quantity textfield");
}
return YES;
}
两个日志都使用各自的文本字段,并分别打印相应的消息。但是在直接向文本字段发送消息时调用该方法仍然没有任何作用。
找到了答案,显然,UIPresentationFormSheet 不允许你摆脱键盘。我尝试了不同的演示风格,它奏效了。 @Cal,感谢您的question。
【问题讨论】:
-
您可能只想在这里使用
textField == self.productTextField而不是[textField isEqual:self.productTextField](同样适用于其他)。要么你有对同一个实例的引用,要么你没有......当你处理在当前控制器范围内一次只存在一个的实例时,平等并不意味着什么。 -
我会在设置时为所有文本字段分配标签,并添加标签检查而不是 [textField isEqual:self.productTextField]
标签: ios cocoa-touch uitextfielddelegate