UITextField 不辞职第一响应者?

Posted

技术标签:

【中文标题】UITextField 不辞职第一响应者?【英文标题】:UITextField not resigning first responder? 【发布时间】: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] 【参考方案1】:

我认为您需要在 textFieldShouldReturn 方法中明确写入 [textField resignFirstResponder];

如果你已经这样做了,也许这肯定很奇怪。你可以发布你的代码吗? :)

【讨论】:

我希望它这么简单。调用了委托方法,但文本字段不会 resignFirstResponder。 我想到的 3 个其他想法: 1/ 它真的是您正在使用的 UITextField,而不是重新实现 resignFirstResponder 而不调用 super 的子类吗? 2/ 你的视图控制器中有一个名为 textField 的属性吗? 3/ 如果你在你正在使用的两个文本字段上调用 ​​resignFirstResponder 怎么办? 感谢您的帮助。回答你的想法,对所有三个都没有。然而,我确实找到了答案。请查看我编辑的问题。

以上是关于UITextField 不辞职第一响应者?的主要内容,如果未能解决你的问题,请参考以下文章

UITextField,辞职第一响应者时,导致文本的奇怪动画滚动

Swift 如何让所有 uiTextfield 上的第一响应者辞职

UITextField 辞职第一响应者 iOS4

使用 UIToolbar/UITextField 辞职第一响应者问题

UITextField辞职第一响应者后如何更改UIScrollView contentSize

iPhone-在 UITextField 上辞职第一响应者后,无法重新聚焦