用户清除 DateTimeRow Eureka Forms 的方法
A way for user to clear DateTimeRow Eureka Forms
我在 iOS 表单中使用 Eureka。我有几个 Datetime 行最初是空白的,但是一旦用户点击该字段,当前 Date() 就会自动填充到该字段中。请参阅此 post.
底部的图片
这里的问题是我需要一种好方法让用户清除时间,并在用户已经输入日期后将字段恢复为 nil。
我想在键盘附件视图中添加一个 "clear" 按钮,但我想不出用 eureka 来实现它的方法。
也欢迎任何其他实施建议!
这是我的 DateTimeRow
代码
<<< DateTimeRow("Tag Name"){ row in
row.disabled = Condition(booleanLiteral: self.dataEdit?.isLocked ?? false)
} .cellSetup { (cell, row) in
row.title = "Duty Start Time"
row.value = self.dataEdit == nil ? nil : self.dataEdit?.dutyStart
row.dateFormatter?.timeZone = TimeZone(secondsFromGMT: 0)
cell.datePicker.timeZone = TimeZone(secondsFromGMT: 0)
} .onChange{ row in
//currently empty
} .onCellHighlightChanged({ (cell, row) in
// this used to fill in the current date once the user taps on an empty field
if row.value == nil {
row.value = Date()
}
})
您可以修改accessoryview。首先添加 class。
class CamelAccessoryView : NavigationAccessoryView {
override init(frame: CGRect) {
super.init(frame: CGRect(x: 0, y: 0, width: frame.size.width, height: 44.0))
autoresizingMask = .flexibleWidth
fixedSpace.width = 22.0
setItems([previousButton, fixedSpace, nextButton, flexibleSpace, clearButton, fixedSpace, doneButton], animated: false)
}
var clearButton = UIBarButtonItem(title: "Clear", style: UIBarButtonItem.Style.plain, target: nil, action: nil)
var fixedSpace = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
var flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
在你的控制器中覆盖是这样的
class RowsExampleViewController: FormViewController {
override var customNavigationAccessoryView: (UIView & NavigationAccessory)? {
// The width might not be correctly defined yet: (Normally you can use UIScreen.main.bounds)
let navView = CamelAccessoryView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 44.0))
navView.previousButton.target = self
navView.clearButton.target = self
navView.clearButton.action = "clearAction:"
return navView
}
它将添加一个清除按钮。将会警告您“没有使用 Objective-C 选择器 'clearAction:'.
声明的方法
创建一个选择器来清除您的输入。
当点击该功能时,您可以输入
let yourInput = self.form.rowBy(tag: "Tag Name") as! DateTimeRow
yourInput.value = "" // just clear it
更新:::
试着改变你的功能。
@objc func clearAction(button: UIBarButtonItem){
guard let currentRow = tableView?.findFirstResponder()?.formCell()?.baseRow else { return }
currentRow.baseValue = nil
currentRow.updateCell()
}
如果这不起作用,请尝试使用第二个选项来制作全局 tagNo 变量以获取已选择的行。
我在 iOS 表单中使用 Eureka。我有几个 Datetime 行最初是空白的,但是一旦用户点击该字段,当前 Date() 就会自动填充到该字段中。请参阅此 post.
底部的图片这里的问题是我需要一种好方法让用户清除时间,并在用户已经输入日期后将字段恢复为 nil。
我想在键盘附件视图中添加一个 "clear" 按钮,但我想不出用 eureka 来实现它的方法。
也欢迎任何其他实施建议!
这是我的 DateTimeRow
代码<<< DateTimeRow("Tag Name"){ row in
row.disabled = Condition(booleanLiteral: self.dataEdit?.isLocked ?? false)
} .cellSetup { (cell, row) in
row.title = "Duty Start Time"
row.value = self.dataEdit == nil ? nil : self.dataEdit?.dutyStart
row.dateFormatter?.timeZone = TimeZone(secondsFromGMT: 0)
cell.datePicker.timeZone = TimeZone(secondsFromGMT: 0)
} .onChange{ row in
//currently empty
} .onCellHighlightChanged({ (cell, row) in
// this used to fill in the current date once the user taps on an empty field
if row.value == nil {
row.value = Date()
}
})
您可以修改accessoryview。首先添加 class。
class CamelAccessoryView : NavigationAccessoryView {
override init(frame: CGRect) {
super.init(frame: CGRect(x: 0, y: 0, width: frame.size.width, height: 44.0))
autoresizingMask = .flexibleWidth
fixedSpace.width = 22.0
setItems([previousButton, fixedSpace, nextButton, flexibleSpace, clearButton, fixedSpace, doneButton], animated: false)
}
var clearButton = UIBarButtonItem(title: "Clear", style: UIBarButtonItem.Style.plain, target: nil, action: nil)
var fixedSpace = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
var flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
在你的控制器中覆盖是这样的
class RowsExampleViewController: FormViewController {
override var customNavigationAccessoryView: (UIView & NavigationAccessory)? {
// The width might not be correctly defined yet: (Normally you can use UIScreen.main.bounds)
let navView = CamelAccessoryView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 44.0))
navView.previousButton.target = self
navView.clearButton.target = self
navView.clearButton.action = "clearAction:"
return navView
}
它将添加一个清除按钮。将会警告您“没有使用 Objective-C 选择器 'clearAction:'.
声明的方法创建一个选择器来清除您的输入。
当点击该功能时,您可以输入
let yourInput = self.form.rowBy(tag: "Tag Name") as! DateTimeRow
yourInput.value = "" // just clear it
更新:::
试着改变你的功能。
@objc func clearAction(button: UIBarButtonItem){
guard let currentRow = tableView?.findFirstResponder()?.formCell()?.baseRow else { return }
currentRow.baseValue = nil
currentRow.updateCell()
}
如果这不起作用,请尝试使用第二个选项来制作全局 tagNo 变量以获取已选择的行。