在点击 UITextField 时,出现 DatePicker

Posted

技术标签:

【中文标题】在点击 UITextField 时,出现 DatePicker【英文标题】:On tapping UITextField, DatePicker is appearing 【发布时间】:2021-08-06 03:52:59 【问题描述】:

已经在 UITableViewCell 中实现了 DatePicker,当表格在点击显示 DatePicker 时滚动一些随机的 UITextfields,如何解决这个问题,请指导。以下是我的代码:

// Inside cellForeRowAt:

if (indexPath.row == 4) 
                    cell.txtFieldValue.tag = 24
                    cell.txtFieldValue.addTarget(self, action: #selector(self.dp(_:)), for: .editingDidBegin)
                    nCell.txtFieldValue.keyboardToolbar.doneBarButton.setTarget(self, action: #selector(doneButtonClicked))

                

@IBAction func dp(_ sender: UITextField) 
    if (sender.tag == 22 || sender.tag == 24) 
        let datePickerView = UIDatePicker()
        datePickerView.datePickerMode = .date
        datePickerView.maximumDate = Date()
        sender.inputView = datePickerView
        
        if #available(ios 13.4, *) 
            datePickerView.preferredDatePickerStyle = .wheels
         else 
            // Fallback on earlier versions
        
        
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "MM/dd/yyyy"
        let now = Date()
        let dateString = dateFormatter.string(from:now)
        
            let selectedDate = dateFormatter.date(from: dateString)
            datePickerView.setDate(selectedDate!, animated: true)
       
        if(sender.tag == 24) 
            datePickerView.addTarget(self, action: #selector(handleDatePicker(sender:)), for: .valueChanged)
           
         else if(sender.tag == 22) 
            datePickerView.addTarget(self, action: #selector(handleDOBDatePicker(sender:)), for: .valueChanged)
            
        
    
    print("tag: ", sender.tag)


@objc func handleDatePicker(sender: UIDatePicker) 
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "MM/dd/yyyy"
    selectedEffectiveDate = dateFormatter.string(from: sender.date)
    print(selectedEffectiveDate as Any)
    

这里的问题是,其他一些应该打开键盘的文本字段也会打开日期选择器,但不是所有的文本字段。是什么导致我没有得到请指导

【问题讨论】:

【参考方案1】:

如果您有多个部分,则行编号从每个部分的开头开始。根据您在上面每个部分的每 5 行添加的代码,DatePicker 将打开。因此,在您将在表格视图中看到的第 5 行之后打开 DatePicker 是正常的。如果您只想在第一部分的第 5 行打开 DatePicker,您还必须检查它是第一部分,即 indexPath.section == 0。

if indexPath.section == 0 && indexPath.row == 4  ... 

【讨论】:

是的,已经做到了,部分检查是在 cellForRowAt 中实现的:因此将标签 22 用于索引 2 能否粘贴所有的 cellForRowAt: 代码

以上是关于在点击 UITextField 时,出现 DatePicker的主要内容,如果未能解决你的问题,请参考以下文章

点击 UITextField 时没有出现 UIKeyboard

当我在 UITextField 中快速点击时,为啥 UIKeyboard 不出现?

在我的应用程序中点击 UITextField 时没有出现 UIKeyboard [重复]

在 UITextField 上点击时将 UIButton 移动到键盘上方

键盘出现时UITextField上移【Swift】

UITableView 中的 UITextField 与 DatePicker 的 InputView