如何知道文本字段何时更改而不保存

Posted

技术标签:

【中文标题】如何知道文本字段何时更改而不保存【英文标题】:How to know when textfield are changed without saving 【发布时间】:2014-01-10 10:13:01 【问题描述】:

有一些设计模式或最佳实践可以在表单中实现“退出而不保存更改”吗? 在我的android应用程序中,我在视图初始化时使用了一个布尔isChanged设置为false,然后如果用户关注一个文本字段并更改文本,我将新文本与旧文本进行比较,如果不匹配我放布尔值为真。在“关闭”按钮的压力下,我检查布尔值,如果它是真的,应用程序会询问用户是否真的想关闭视图。

【问题讨论】:

你也可以在 ios 上做同样的事情。检查 UITextFieldDelegate 方法。 尝试- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)stringUITextField 委托方法,该方法将调用每个字符更改。 【参考方案1】:

您可以在 viewController 类中使用 UITextfield 委托方法。

当用户点击文本字段时,此方法被调用

- (void)textFieldDidBeginEditing:(UITextField *)textField
  //Set the boolean false here.
 

当用户输入时,这个方法被调用。

- (BOOL)textField:(UITextField *)textField 
        shouldChangeCharactersInRange:(NSRange)range 
        replacementString:(NSString *)string

当用户停止输入并且键盘返回时,这个方法就会被调用。

- (void)textFieldDidEndEditing:(UITextField *)textField
 // Set the boolean true here

如果布尔值为真,则将当前值与旧值进行比较并决定流程。

 if(boolean)
    NSString *currentString = textfield.text;
    if([previousString isEqualToString:currentString])
      NSLog("not edited");
 

【讨论】:

是的,没错。我在表单上还有一个可编辑的文本字段。我怎么知道它是否被编辑过? 一旦布尔值为真,您可以比较先前和当前的文本值,如果它们不同,则该文本文件已被编辑。查看我编辑的答案【参考方案2】:

尝试使用TextfieldDelegate函数- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField

【讨论】:

是的,没错。我在表单上还有一个可编辑的文本字段。我怎么知道它是否被编辑过?【参考方案3】:

试试这个: UITextFieldDelegate

//MARK: - UITextfield Delegate Method -
func textFieldShouldReturn(_ textField: UITextField) -> Bool

    textField.resignFirstResponder()

    if textField.text == ""
    
        AppDelegate.sharedInstance().showAlertAction(strTitle: "OK", strMessage: "Please enter keyword for search.")
         (success) in

        
    
    else
    
        let searchVC = self.storyboard?.instantiateViewController(withIdentifier: "SearchViewController") as! SearchViewController
        searchVC.strSearchVal = SAFESTRING(str: self.txtSearch.text!)
        searchVC.isFromHome = true
        self.navigationController?.pushViewController(searchVC, animated: true)
    
    return true

【讨论】:

以上是关于如何知道文本字段何时更改而不保存的主要内容,如果未能解决你的问题,请参考以下文章

QT 文本编辑器 - 文本从上次保存更改?

如何检测表视图中的项目何时更改?

QT文本编辑器 - 文本是否从上次保存更改?

实体框架,查询包含上下文更改的dbset,而不调用保存更改

如何知道键盘何时隐藏文本字段?

从 UITextField 保存文本数据而不按其他键(需要帮助)