我正在玩我的第一个iphone应用程序; SDK 3.0。我有一个UITextField,当文本输入时,我想从文本字段中获取doubleValue并执行一些计算并在UITableView中显示它们。
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:但这也不起作用。
刚遇到你描述的同样问题。在尝试了我能想到的一切后,我添加了这个委托方法:
// 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;
}
textFieldDidEndEditing在文本字段重新启动它的第一个响应者状态时触发,而当按下返回按钮时触发textFieldShouldReturn。
它 声音 就像你的textfield永远不会辞去firstResponder一样。您可以通过放置一些调试输出(如评论中所示)并且只需触摸即可导出文本字段来轻松检查它 - 例如,开始键入然后只需触摸字段外部以强制它退出firstResponder。
不确定这是否有帮助,但听起来像是一个奇怪的案例。
正如其中一条评论中所提到的,我尝试使用HelloWorld应用程序复制我试图做的更简单的版本,并且它在第一次尝试时工作,没有任何问题,正如预期的那样。面对这一点,我开始怀疑了一下。
在我试图找到这个问题的答案的所有谷歌搜索中的某个地方,我跑过一个链接,其中一个人遇到问题,事件没有从按钮触发,事实证明问题与视图有关放置按钮的那个视图和另一个子视图作为按钮的对等视图,该子视图以某种方式吃了事件而不是允许它们去他们被定向的地方。情景与我的情况并不完全相同,但它听起来足够接近调查值得。尽管在这里收到了所有优秀的建议,但没有一个能够取得成果。
昨晚我决定从头开始完全重新创建nib文件(复制了我的第一个),然后我开始工作了。关键的区别似乎是我在原始的非工作nib文件中,我拖了一个 TableViewController
从调色板,然后将其类型更改为我的子类 PZTableViewController
。当我在新笔尖中做同样的事情时,事件并没有发生。另一方面,如果我删除了拖延 TableViewController
而只是拖过一个 NSObject
并将其课程改为 PZTableViewController
并检查了一切,这一切都“正常”。
我将尝试追逐让我开始思考这一思路的链接,并将其作为编辑或评论发布。
这也不是一个完整的答案,因为我还不了解the-the-palette之间的区别 TableViewController
和我的子类。当我想出来时,我会通过编辑或评论来更新这个答案。
我最终连接editChanged来记录文本字段的每一个更改,而不是弄清楚如何用剩余的回调来覆盖所有的角落情况。
非常“高效”,因为textFieldDidEndEditing(讽刺)的类似于android的“可用性”。