2011-12-12 111 views
0

我正在将视图控制器作为模式呈现。该视图控制器具有通过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

+0

您可能只想在这里使用'textField == self.productTextField'而不是'[textField isEqual:self.productTextField]'(对于另一个类似)。要么你有一个对同一个实例的引用,要么你没有......在当前控制器的范围内,当你处理的实例只有一个实例存在时,相等并不意味着太多。 –

+0

我将标签分配给所有文本框设置它们,并添加一个检查标签,而不是[textField isEqual:self.productTextField] – StudentX

回答

4

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

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

+0

我希望它是如此简单。委托方法被调用,但文本字段不会resignFirstResponder。 –

+0

3我想到的其他想法:1 /它真的是你使用的UITextField,而不是重新实现resignFirstResponder不调用超类的子类? 2 /你的视图控制器中是否有一个名为textField的属性? 3 /如果您在使用的两个文本字段上都调用resignFirstResponder会怎么样? –

+0

我很感激帮助。要回答你的想法,不要全部三个。然而,我确实找到了答案。请查看我编辑的问题。 –

相关问题