2009-08-04 89 views
11

我正在玩写我的第一个iphone应用程序; SDK 3.0。我有一个UITextField,当输入文本时,我想从文本字段获得doubleValue并执行一些计算并将它们显示在UITableView中。为什么textFieldDidEndEditing:不被调用?

UITextField的委托采用UITextFieldDelegate协议,并实现了textFieldShouldReturn:和textFieldDidEndEditing:方法。 textFieldShouldReturn:根据文档还应该触发textFieldDidEndEditing:,但我永远不会看到textFieldDidEndEditing:被调用的第一个响应者状态。

- (BOOL)textFieldShouldReturn:(UITextField*)theTextField { 
    if (theTextField == thresholdValue) { 
     [thresholdValue resignFirstResponder]; 
    } 
    return YES; 
} 

- (void)textFieldDidEndEditing:(UITextField *)textField { 
    [self updateThresholdValue:textField]; 
} 

这可能是值得指出的是,我还尝试了一些文本字段的事件连接到代表和具有事件调用updateThresholdValue:直接,但也不能工作。

+0

把一些NSLogs,以确保该方法永远不会被调用。 – mk12 2009-08-04 16:04:19

+0

你做了myTextField.delegate = self某处正确吗? – mk12 2009-08-04 16:06:25

+2

我假设他的代表接线正确,否则textFieldShouldReturn:不会被调用。 – 2009-08-04 16:18:58

回答

1

正如其中一条评论所述,我尝试使用HelloWorld应用程序复制我想要做的更简单的版本,并且它在第一次尝试时工作,没有问题,就像预期的那样。面对这一点,我开始怀疑了一下。

在所有的搜索结果中,有一个地方我试图得到这个问题的答案,我跑过了一个人遇到问题的链接,而这个链接没有从按钮触发事件,结果发现问题是相关的到按钮被放置的视图,并且该视图具有另一个子视图作为按钮的同级,并且该子视图以某种方式在吃事件而不是让他们去他们被指示的地方。这种情况与我的情况不完全相同,但听起来很接近,调查将是值得的。尽管收到了很好的建议,但都没有成果。

昨晚我决定从头开始完全重新创建nib文件(制作了我的第一个副本),然后让它工作。关键区别似乎是,我在原始非工作nib文件中,我从调色板拖动了一个TableViewController,然后将其类型更改为我的子类PZTableViewController。当我在新的笔尖上做同样的事情时,事件并没有发生。另一方面,如果我移除了拖动的TableViewController,而只是将它拖过NSObject,并将其班级更改为PZTableViewController,并将所有内容都竖起来,这一切都“正常工作”。

我会尝试追逐让我开始思考这条思路的链接,并将其作为编辑或评论发布。

这也不是一个完整的答案,因为我还不知道从调色板TableViewController和我的子类之间的区别。当我弄清楚时,我会通过编辑或评论来更新这个答案。

5

textFieldDidEndEditing在文本字段退出第一个响应者状态时触发,而按下返回按钮时触发textFieldShouldReturn。

听起来像你的textfield永远不会作为firstResponder辞职。您可以通过输入一些调试输出(如注释中所建议的),并通过触摸浏览文本字段来轻松检查它 - 例如开始输入,然后在场外触摸以强制它退出firstResponder。

不知道这是否有帮助,但它听起来像是一个奇怪的情况,你打。

6

刚才遇到了你描述的同样的问题。尝试后,我能想到的一切我加入此委托方法:

// if we encounter a newline character return 
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    // enter closes the keyboard 
    if ([string isEqualToString:@"\n"]) 
    { 
     [textField resignFirstResponder]; 
     return NO; 
    } 
    return YES; 
} 

现在textFieldShouldEndEditing火灾和文本字段辞职第一响应。

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 
    return YES; 
} 
1

我结束了接线,editingChanged记录到一个文本字段中的每一个变化,而不是考虑如何覆盖所有角落的情况下,其余的回调。

由于类似于android的“可用性”的textFieldDidEndEditing(sarcasm),非常“高效”。

相关问题