ios - UIPickerView 卡住 UI

标签 ios swift uipickerview

在我的应用程序中,我有一个包含两个组件的 ViewController:一个用户可以像时钟一样使用的 UILabel 和一个允许用户选择项目的 UIPickerView。

代码如下:

class MyView: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource{

@IBOutlet weak var lblClock: UILabel!
@IBOutlet weak var pickerAttendance: UIPickerView!
var timer : Timer!
var dateTime: Date!
var pickerData: [String] = ["a","b","c"]

   override func viewDidLoad() {
        super.viewDidLoad()

        dateTime = Date()
        timer = Timer.scheduledTimer(timeInterval: TimeInterval(1), target: self, selector: #selector(updateDate), userInfo: nil, repeats: true)
        timer.fire()

        pickerAttendance.delegate = self
        pickerAttendance.dataSource = self
   }

    @objc func updateDate(){
        dateTime = NSCalendar.current.date(byAdding: Calendar.Component.second, value: 1, to: self.dateTime)
        let s = DateFormatter.localizedString(from: self.dateTime, dateStyle: DateFormatter.Style.none, timeStyle: DateFormatter.Style.medium)
        DispatchQueue.main.async {
            self.lblClock.text = s
        }
    }

   func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
   }

   func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return pickerData.count
   }

   func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return pickerData[row]
   }
}

我实例化一个具有实际值的日期和一个计时器,该函数每隔一秒更新一次标签的值。 我解释我的问题: 当我滚动 pickerview 时,带有计时器的标签不会更新,但是当我释放滚动时,标签会重新开始更新。

滚动条卡住了用户界面。

我尝试在主线程中更新标签,但问题仍然存在。 我希望当我滚动选择器 View 时,标签将继续更新。

最佳答案

把你的计时器放在运行循环中:

override func viewDidLoad() {
    super.viewDidLoad()

    dateTime = Date()
    timer = Timer.scheduledTimer(timeInterval: TimeInterval(1), target: self, selector: #selector(updateDate), userInfo: nil, repeats: true)

    RunLoop.main.add(timer, forMode: RunLoop.Mode.common)

    timer.fire()

    pickerAttendance.delegate = self
    pickerAttendance.dataSource = self
}

关于ios - UIPickerView 卡住 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55415090/

相关文章:

ios - XMPPFramework "typing.."消息状态

ios - 当我添加 UITapGestureRecognizer 处理程序方法时,为什么 TableView 委托(delegate)方法停止工作

ios - 关于 String 和 c strcpy 的快速问题

arrays - Swift:检查数组的字典对象类型

swift - 如何在 Swift 中将 NSUserDefault 与 PickerView 一起使用?

iphone - 仍然对 Objective C 中的内存管理感到好奇

iphone - 对象没有从 NSMutableArray 中删除?

ios - 缩小图像的质量非常低?

uipickerview - iOS 7.1 UITapGesture 不适用于 UIPickerView

iOS 14 PickerView 截断文本