textFieldDidBeginEditing 和 textFieldShouldBeginEditing 之间的确切区别是什么。我想知道我们在哪种情况下使用它们(我知道当我们在文本字段中输入任何内容时会调用它们。我想知道当我们在程序中同时使用它们时调用它们的确切时间)
4 回答
“shouldBegin” 允许您对返回值说“不”以禁止该操作。
“didBegin”表示它刚刚开始发生,你需要在那个时间点采取任何你需要做的动作。
一个textFieldShouldBeginEditing
方法请求委托的许可,以允许在用户点击它时编辑 textField。
另一方面,textFieldDidBeginEditing
当 textField 开始编辑内容时调用(即在 之后textFieldShouldBeginEditing
,如果允许)。
示例:您想要创建一个不可编辑的文本字段,因此您返回 NO:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
return NO;
}
关于 textFieldDidBeginEditing:
讨论 此方法通知委托指定的文本字段刚刚成为第一响应者。您可以使用此方法来更新您的委托的状态信息。例如,您可以使用此方法显示在编辑时应该可见的覆盖视图。
因此,假设您有一个文本字段子类(并且您希望它是可编辑的),当用户编辑内容时会更改图形(例如:它希望在用户键入时显示不同的焦点环),所以您使用它去做这些事情。
如果您将“用户名”和“密码”字段的标签(来自 Storyboard)分别设置为 0 和 1,然后尝试在 func textFieldDidBeginEditing 中捕获活动字段,它不起作用!
**func textFieldDidBeginEditing(_ textField: UITextField) -> Bool
{
activeTextField = textField
返回真
}**
**func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
let value = activeTextField.tag
switch value
{
case 0:
// 对于用户名字段它应该执行这个案例
case 1:
// 对于密码字段它应该执行这个案例
}
}**
当被称为@objc func textFieldDidBeginEditing 时,相同的函数正在工作并提供正确的结果,没有“objc”字样,它不会选择活动字段。我只想知道,为什么会这样……
**@objc func textFieldDidBeginEditing(_ textField: ) -> Bool
{
activeTextField = textField
返回真
}**