以编程方式创建的 UITextField 未加载文本 IOS swift

Programmatically Created UITextField not loading text IOS swift

你好开发者,我知道这是一个非常简单的问题,但我是新手 swift 我正在尝试从日期选择器对话框中设置日期,但是当我单击完成按钮时,它不会加载日期文本,我创建了文本字段以编程方式。

  import UIKit

 class ViewController: UIViewController {
   
var textField: UITextField  {
        let txt =  UITextField(frame: CGRect(x:0 , y:0, width:200, height: 60))
        txt.textColor = .black
        txt.placeholder = "Select Date"
        txt.textAlignment = .left
        txt.center = self.view.center
        txt.translatesAutoresizingMaskIntoConstraints = false
      
        txt.datePicker(target: self,doneAction: #selector(doneAction),cancelAction: #selector(cancelAction),datePickerMode: .date)
       
        return txt
    }

override func viewDidLoad() {
    super.viewDidLoad()
    
    view.addSubview(self.textField)
    self.textField.text = "test"
}

@objc
func cancelAction() {
    self.textField.resignFirstResponder()
}

@objc
func doneAction() {
    if let datePickerView = self.textField.inputView as? UIDatePicker {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd"
        let dateString = dateFormatter.string(from: datePickerView.date)
        self.textField.text = dateString
        print(dateString)
        self.textField.resignFirstResponder()
    }
 }
}

 extension UITextField {
  func datePicker<T>(target: T,
                   doneAction: Selector,
                   cancelAction: Selector,
                   datePickerMode: UIDatePicker.Mode = .date) {
    let screenWidth = UIScreen.main.bounds.width
    
    func buttonItem(withSystemItemStyle style: UIBarButtonItem.SystemItem) -> UIBarButtonItem {
        let buttonTarget = style == .flexibleSpace ? nil : target
        let action: Selector? = {
            switch style {
            case .cancel:
                return cancelAction
            case .done:
                return doneAction
            default:
                return nil
            }
        }()
        
        let barButtonItem = UIBarButtonItem(barButtonSystemItem: style,
                                            target: buttonTarget,
                                            action: action)
        
        return barButtonItem
    }
    
    let datePicker = UIDatePicker(frame: CGRect(x: 0,
                                                y: 0,
                                                width: screenWidth,
                                                height: 216))
    datePicker.datePickerMode = datePickerMode
    self.inputView = datePicker
    
    let toolBar = UIToolbar(frame: CGRect(x: 0,
                                          y: 0,
                                          width: screenWidth,
                                          height: 44))
    toolBar.setItems([buttonItem(withSystemItemStyle: .cancel),
                      buttonItem(withSystemItemStyle: .flexibleSpace),
                      buttonItem(withSystemItemStyle: .done)],
                     animated: true)
    self.inputAccessoryView = toolBar
  }
 }

当我在完成按钮点击时设置 inputText.text =“日期”时,一切看起来都不错,但文本未加载,而日期显示在控制台中。

试试这个:

var textField: UITextField = {
        let txt =  UITextField(frame: CGRect(x:0 , y:0, width:200, height: 60))
        txt.textColor = .black
        txt.placeholder = "Select Date"
        txt.textAlignment = .left
        txt.translatesAutoresizingMaskIntoConstraints = false
      
        txt.datePicker(target: self,doneAction: #selector(doneAction),cancelAction: #selector(cancelAction),datePickerMode: .date)
       
        return txt
    }()

override func viewDidLoad() {
    super.viewDidLoad()
    self.textField.center = self.view.center
    view.addSubview(self.textField)
    self.textField.text = "test"
}