简体   繁体   English

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

[英]Programmatically Created UITextField not loading text IOS swift

Hello developers i know this is very simple question but i am new in swift i am trying to set date from date picker dialog but when I click done button it does not load date text, I created textfield programmatically.开发人员您好,我知道这是一个非常简单的问题,但我是 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
  }
 }

everything looks good but text not loading when i set inputText.text = "date" on done button click, while date is showing in console.一切看起来都不错,但是当我在完成按钮单击上设置 inputText.text = "date" 时没有加载文本,而日期显示在控制台中。

Try this:尝试这个:

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"
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM