resignFirstResponder OR - (IBAction)doneButtonOnKeyboardPressed:(id)sender

时间:2010-04-01 08:04:23

标签: iphone cocoa-touch uitextfield

我只是想知道在iphone应用程序中隐藏键盘哪种方法更好

1>实施

- (IBAction) doneButtonOnKeyboardPressed: (id)sender
{

}

Textfield的退出事件结束时的方法

OR

在Textfield中实现此

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

哪种选择最好选择哪种情况......?任何一个选项都优于其他选项......?

3 个答案:

答案 0 :(得分:1)

我非常喜欢通过响应UIControlEventDidEndOnExit事件来使用目标/操作模式,通常是通过将IB中显示的“End End On Exit”事件连接到文件所有者,在Interface Builder中连接它,使用我选择的方法。这将是您展示的第一个选项。

这就是为什么我更喜欢这种机制:

很多应用程序(好吧,至少我的应用程序),有必要区分取消输入,例如,通过触摸文本字段外部,以及通过完成按钮完成输入键盘(文档倾向于将此称为“返回”按钮)。因为-textFieldDidEndEditing委托方法在字段为第一响应者时(无论结束编辑的原因如何)在任何时候调用 -resignFirstResponder,所以必须有一个变量在哪里跟踪你如何终止编辑的路径。这引入了一定程度的复杂性,而这并非必要。

在我的应用中,我会回复UITextField之外的触摸事件,调用-resignFirstResponder取消编辑而不采取进一步操作。如果我使用委托方法,我需要在这里设置状态来记录我在我的代码中使用'cancel'路径,并使用-textFieldShouldReturn委托方法来设置状态以指示我要去通过我的代码的“完成”路径,并调用-resignFirstResponder。凌乱。

在此处使用目标/操作模式可以实现更简单,更清晰的代码。

答案 1 :(得分:0)

功能相同,一个是从控件“textfield”处理,另一个是与键盘委托相关。你为什么要处理键盘?我建议从你的控件处理它......

答案 2 :(得分:0)

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

以上方法是最好的 - 你只需要选择你的任何textFields&在连接检查器中 - 将文件所有者连接到textFields的委托。这将使你的事情发挥作用。