textFieldDidBeginEditing和textFieldShouldBeginEditing之间的确切区别是什么。我想知道在哪种情况下我们使用它们(我知道当我们在文本字段中输入任何内容时它们被调用。我想知道在我们的程序中使用它们时它们被调用的确切时间)
答案 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
} **