如何知道文本字段何时更改而不保存
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 *)string
的UITextField
委托方法,该方法将调用每个字符更改。
【参考方案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
【讨论】:
以上是关于如何知道文本字段何时更改而不保存的主要内容,如果未能解决你的问题,请参考以下文章