我正在将视图控制器作为模式呈现。该视图控制器具有通过IB连接的多个UITextField。UITextField不会退出第一响应者?
我的问题是当按下返回键时,委托方法被调用,但由于某种原因,对给定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] – StudentX