textFieldDidBeginEditing和textFieldShouldBeginEditing之间的确切区别是什么

时间:2012-12-18 18:18:44

标签: iphone objective-c ios

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

4 个答案:

答案 0 :(得分:7)

A" shouldBegin"某些东西允许你对返回值说不,以禁止行动。

A" didBegin"有些东西说它刚刚开始发生,你需要采取你需要采取的任何行动。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

关于textFieldDidBeginEditing:

  

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

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

答案 3 :(得分:0)

如果您将“用户名”和“密码”字段的标记(从情节提要)分别设置为0和1,然后尝试在func textFieldDidBeginEditing中捕获有效字段,则它将无效!

**func textFieldDidBeginEditing(_ textField: UITextField) -> Bool      

{
activeTextField = textField
返回true
} **

**func textFieldShouldReturn(_ textField: UITextField) -> Bool      

{
让值= activeTextField.tag
开关值
{
      案例0:
          //对于用户名字段,应执行这种情况
      情况1:
         //对于密码字段,应执行这种情况
    }
} **

当被称为@objc func textFieldDidBeginEditing时,相同的函数正在工作并提供正确的结果,如果没有“ objc”字样,则它不会选择活动字段。我只想知道,为什么会这样?

**@objc func textFieldDidBeginEditing(_ textField: ) -> Bool     

{
activeTextField = textField
返回true
} **