- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用下面的代码来了解日期选择器。它有效,但奇怪的是,当我第一次滚动日期选择器时,预期的变化不会发生。之后它将正常工作。想知道发生了什么。
import UIKit
import Foundation
class ViewController: UIViewController {
// Place this code inside your ViewController or where you want ;)
var txtField: UITextField = UITextField(frame: CGRect(x: 100, y: 0, width: 300, height: 50))
override func viewDidLoad() {
super.viewDidLoad()
// date picker setup
let datePickerView:UIDatePicker = UIDatePicker()
// choose the mode you want
// other options are: DateAndTime, Time, CountDownTimer
datePickerView.datePickerMode = UIDatePickerMode.countDownTimer
// choose your locale or leave the default (system)
//datePickerView.locale = NSLocale.init(localeIdentifier: "it_IT")
datePickerView.addTarget(self, action: #selector(onDatePickerValueChanged(_:)), for: UIControlEvents.valueChanged)
txtField.inputView = datePickerView
// datepicker toolbar setup
let toolBar = UIToolbar()
toolBar.barStyle = UIBarStyle.default
toolBar.isTranslucent = true
let space = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.done, target: self, action: #selector(ViewController.doneDatePickerPressed))
// if you remove the space element, the "done" button will be left aligned
// you can add more items if you want
toolBar.setItems([space, doneButton], animated: false)
toolBar.isUserInteractionEnabled = true
toolBar.sizeToFit()
txtField.inputAccessoryView = toolBar
self.view.addSubview(txtField)
}
func doneDatePickerPressed(){
self.view.endEditing(true)
}
func onDatePickerValueChanged(_ sender: UIDatePicker) {
let (h, m, _) = secondsToHoursMinutesSeconds (duration: sender.countDownDuration)
self.txtField.text = String("\(h) Hours \(m) Minutes")
}
func secondsToHoursMinutesSeconds (duration : Double) -> (Int, Int, Int) {
let seconds:Int = Int(duration)
return (seconds / 3600, (seconds % 3600) / 60, (seconds % 3600) % 60)
}
}
最佳答案
奇怪。这似乎是设置为 UIDatePickerMode.countDownTimer
模式的日期选择器中的错误。
您可以通过实现 UITextFieldDelegate
方法 textFieldShouldBeginEditing(_:)
并在短暂的延迟。这是我的测试项目的代码。 (在我的项目中,时间间隔字段称为 optionalTimeField
,时间间隔值是可选的,称为 optionalTime
。您需要更改它以适合您的代码:
查看下面的新函数 textField(_:,shouldChangeCharactersInRange:,replacementString:)
extension ViewController: UITextFieldDelegate {
//Add this function to prevent keyboard editing
func textField(_ textField: UITextField,
shouldChangeCharactersIn range: NSRange,
replacementString string: String) -> Bool {
return false
}
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
if textField === optionalTimeField {
//Set the time interval of the date picker after a short delay
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
self.datePickerView.countDownDuration = self.optionalTime ?? 60
}
}
return true
}
}
我建议向 Apple bug reporter 提交错误报告。根据线程@Santosh 链接,看起来这个错误自 iOS 7 以来一直在 UIDatePicker
中,这很糟糕。
我没有看到解决方法的一个错误是,如果您尝试选择 0 小时 0 分钟的时间间隔,它会切换到 1 分钟,在那之后,您选择的下一个时间间隔会不触发值更改方法。
间隔日期选择器有很多奇怪的地方,比如你不能指定它来选择秒数。如果它足够重要,您可能希望基于通用 UIPickerView
创建自己的时间间隔选择器。它不应该那么难。 (特别是如果您不需要担心本地化到使用不同时间格式的多个区域设置。)您只需创建一个带有小时、分钟和(可选)秒微调器的选择器 View ,用您的合法值填充它,然后你就走了。您可以将其设置为具有可选的最小和最大间隔值。
关于ios - 带 UIControlEvents.valueChanged 的日期选择器不适用于第一个值更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40934689/
我是 AngularFire + Firebase 的新手,我正在尝试从 angularfire2 github 上学习教程。 当我执行这段代码时: items: Observable; cons
我正在开发 AngularJS PWA 应用程序(在我的注册组件中有表格) 表单有 3 个步骤: 第一步 名字 姓氏 电子邮件 密码 电话号码 第 2 步 例子 例子 第 3 步 例子 例子 当我的用
使用 angularfire2 开发 Angular5 应用程序。我有一个包含大量项目的列表。当我订阅它时: this.db.list("/list").valueChanges().subscrib
在我的一个页面上,我使用 FormBuilder 在初始化时填写表单。只要输入不为空,每个输入都会得到一个类。这是通过向每个输入添加一个 ngClass 并订阅 FormGroup 的 valueCh
我正在创建一个动态创建的响应式表单。我以可观察对象(来自主题)的形式从服务获取数据,并希望在表单创建后订阅表单的 valueChanges。当我第一次设置它时,我订阅了服务的每个可观察对象和 valu
this.editForm = this.fb.group({ step1: this.fb.group({ transport_type_id: ['', [
我有点不清楚 valueChanges 实际上做了什么——如果我的订阅看起来像这样: ( typescript /角度) this.accountsCollection = this.fire
Winforms 2.0。将 DateTimePicker 粘贴到表单上。默认为今天。单击下拉箭头以显示日历,然后单击“今天”。 ValueChanged 事件确实会触发,即使它已经设置为今天。 我想
我们有一个 Angular 子表单,通过 Valuechanges 发出值。在父组件中,如果子组件的新邮政编码值与以前的邮政编码值不同,我们希望运行任务。 现在,我们正在创建一个变量来存储以前的邮政编
我是 Java 新手,遇到了一些问题,如果这是一个显而易见或经常回答的问题,我很抱歉,但我已经查看了大约 10 个此类类型的其他错误,但无法找出我的问题。我在主程序中的标记行上收到错误,表示构造函数未
如果组合框中的值发生更改,如何在组合查看器中触发事件?并非每个选择都会触发(addSelectionChangedListener)。我只想触发一个事件,仅当当前选择不同的值时才触发,而不是相同的值。
使用键盘上的数字输入值时不会激活事件。它仅在您使用向上和向下箭头时激活。我想要的是,它必须像文本框 textchanged 事件一样在每次键盘敲击时激活。 我尝试了几件事,但用户必须按 Enter 才
在这个简单的 gui 列表上进行选择时,我得到 valueChanged 在鼠标按下时执行两次,鼠标抬起时执行一次。 import groovy.swing.SwingBuilder import j
我正在尝试使用 Adafruit Bluefruit LE(蓝牙 4 模块)与 arduino 通信,一切都已设置并配对等等,但我在 GattCharacteristic 上遇到了 ValueChan
我想用UISlider实时计算一个数字,这是我的方法: @IBAction func HPsliderValueChanged(_ sender: CustomUISlider) { calc
我这里有一个包含两 (2) 列的 JTable。右栏是可编辑的,而另一栏是不可编辑的。 所以,我的问题是,每当用户更改单元格的值时,该特定单元格将更改其单元格颜色。 我想这样做是因为我想让用户知道他/
我的最终目标是制作一个也允许用户输入的下拉菜单。我似乎能做的最好的事情就是在下拉列表旁边添加一个文本框,使其看起来相似,我遇到的问题是,每当我的下拉值发生更改时,我都需要更新文本框。我有一些我一直在玩
假设我有一个 QSpinBox,其中的值为 123.45。如果我手动编辑它并开始删除这五个值,则 valueChanged 会针对值 123.4 被触发。如果我继续删除这四个,就会再次发生。 如果我在
我想创建一个表单,允许用户在五个不同的字段 (NumericUpDown) 中设置一定数量的点。当该点数达到 0 时,用户将无法再添加。 (不过,我仍然希望用户能够删除积分。) 到目前为止,这是我的代
我正在使用 UIDatePicker 用日期更新 UILabel,但我注意到 valueChanged 事件仅在车轮停止转动。 理想情况下,如果用户轻弹一列,我希望标签中的日期随着滚轮旋转而不断更新,
我是一名优秀的程序员,十分优秀!