2

textFieldDidBeginEditing 和 textFieldShouldBeginEditing 之间的确切区别是什么。我想知道我们在哪种情况下使用它们(我知道当我们在文本字段中输入任何内容时会调用它们。我想知道当我们在程序中同时使用它们时调用它们的确切时间)

4

4 回答 4

7

“shouldBegin” 允许您对返回值说“不”以禁止该操作。

“didBegin”表示它刚刚开始发生,你需要在那个时间点采取任何你需要做的动作。

于 2012-12-18T18:21:28.200 回答
1

一个textFieldShouldBeginEditing方法请求委托的许可,以允许在用户点击它时编辑 textField。

另一方面,textFieldDidBeginEditing当 textField 开始编辑内容时调用(即在 之后textFieldShouldBeginEditing,如果允许)。

于 2012-12-18T18:24:15.967 回答
0

示例:您想要创建一个不可编辑的文本字段,因此您返回 NO:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    return NO;
}

关于 textFieldDidBeginEditing:

讨论 此方法通知委托指定的文本字段刚刚成为第一响应者。您可以使用此方法来更新您的委托的状态信息。例如,您可以使用此方法显示在编辑时应该可见的覆盖视图。

因此,假设您有一个文本字段子类(并且您希望它是可编辑的),当用户编辑内容时会更改图形(例如:它希望在用户键入时显示不同的焦点环),所以您使用它去做这些事情。

于 2012-12-18T18:26:35.660 回答
0

如果您将“用户名”和“密码”字段的标签(来自 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
返回真
}**

于 2019-10-24T19:41:40.183 回答