FUITextFieldFormCell.onChangeHandler无法捕获正确?

2020-08-20 23:47发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在使用FUITextFieldFormCell创建"创建客户"表单,并使用示例在此处找到。 从文档上说

如果isTrackingLiveChanges == true,则将为每个输入的字母调用onChangeHandler。 否则,只有在用户点击"完成"键或该字段退出第一响应者之后,才会调用onChangeHandler。

我有本地变量,如示例中所示,它填充了onChangeHandler,但是如果我没有在最后输入的字段中输入内容,则不激活isTrackingLiveChanges参数就不会捕获该值。 不知道这是设计使然还是某种错误,但似乎是后者。 依靠用户始终点击完成是有风险的,并且根据我的经验-表中的单元格很少完成或输入,因此值不会填充到局部变量中。

使用isTrackingLiveChanges是最好的解决方案,还是应该在保存功能中循环遍历表并从FUITextFieldFormCell.value字段读取值? 不知道是否在没有完成/输入的情况下将更改提交了。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在使用FUITextFieldFormCell创建"创建客户"表单,并使用示例在此处找到。 从文档上说

如果isTrackingLiveChanges == true,则将为每个输入的字母调用onChangeHandler。 否则,只有在用户点击"完成"键或该字段退出第一响应者之后,才会调用onChangeHandler。

我有本地变量,如示例中所示,它填充了onChangeHandler,但是如果我没有在最后输入的字段中输入内容,则不激活isTrackingLiveChanges参数就不会捕获该值。 不知道这是设计使然还是某种错误,但似乎是后者。 依靠用户始终点击完成是有风险的,并且根据我的经验-表中的单元格很少完成或输入,因此值不会填充到局部变量中。

使用isTrackingLiveChanges是最好的解决方案,还是应该在保存功能中循环遍历表并从FUITextFieldFormCell.value字段读取值? 不知道是否在没有完成/输入的情况下将更改提交了。

付费偷看设置
发送
2条回答
My梦
1楼 · 2020-08-21 00:00.采纳回答

我看了看内部结构,看起来好像可以添加一个resignFirstReponder()来改善这一点。

通常,isTrackingLiveChanges在许多情况下都很有用-实时验证,更新模型对象...实际上,除非每次更新模型都有效果链 ,无论如何,我可能都会指出您的方向。

导入UIKit
 导入SAPFiori

 struct Object {
     var productName:字符串=" A名称" {
         didSet {
             打印(" productName:\(productName)")
         }
     }
 }

 TableViewController类:UITableViewController {
     覆盖func viewDidLoad(){
         super.viewDidLoad()
         self.tableView.register(FUITextFieldFormCell.self,forCellReuseIdentifier:FUITextFieldFormCell.reuseIdentifier)
     }

     var myObject:Object = Object()

     覆盖func tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath)-> UITableViewCell {

         让cell = tableView.dequeueReusableCell(withIdentifier:FUITextFieldFormCell.reuseIdentifier,for:indexPath)为!  FUITextFieldFormCell

         cell.keyName ="可编辑"
         cell.value = myObject.productName
         cell.isTrackingLiveChanges = true

        //MARK:实现onChangeHandler
         cell.onChangeHandler = {[[unown self] newValue in
             self.myObject.productName = newValue
         }
         返回单元
     }

     覆盖func numberOfSections(在tableView中:UITableView)-> Int {
         返回1
     }

     覆盖func tableView(_ tableView:UITableView,numberOfRowsInSection部分:Int)-> Int {
         返回1
     }
 }


 
95年老男孩
2楼-- · 2020-08-20 23:58

谢谢,目前我只有基本的验证,但这当然可能会改变。

如果要求不高,您能指导我如何(如果可能)从onChangeHandler调用函数以在单独的函数中执行更新和验证,并返回可选的验证消息吗?

它当然可以从闭包开始工作,但我认为在添加闭包以验证tableView中的大多数字段时,代码会有些混乱。

有可能吗?

 cell.onChangeHandler = validate(电子邮件)
 细胞。  inlineValidationMessage =消息

 func validate(_email:String)->字符串{
 如果...
 返回"电子邮件与模式不匹配..."
  }
 } 

一周热门 更多>