UIDatePicker作为UITextField的Inputview

时间:2019-02-13 05:21:50

标签: ios swift uitextfield uidatepicker

在我的代码中,我已将Datepicker用作Textfield的Inputview

<div 
    class="ess-product-desc" ng-hide="currentView == 'detail' `&amp;&amp; deviceType=='mobile'" 
    ui-sref="detail({itemId: 'BWK6400', uom: 'CT', cm_sp:'', merchPreference:''})" 
    href="#/itemDetail?`itemId=BWK6400&amp;uom=CT" aria-hidden="false">
        <span>Center-Pull Hand Towels, 2-Ply, Perforated, 7 7/8 x 10, White, 600/RL, 6 RL/CT</span>
</div>

文本字段委托无法使用,因为文本字段不可编辑。

每当用户单击“文本字段”时,我需要将文本字段中的文本(日期)更新为UIPicker输入视图

[]

4 个答案:

答案 0 :(得分:3)

在Swift 5中,Xcode 12使用以下代码:

if #available(iOS 14, *) {
    datePicker.preferredDatePickerStyle = .wheels
}

它将选择器设置为与iOS 13中相同。

答案 1 :(得分:2)

result

答案 2 :(得分:0)

首先,您需要将字符串转换为日期。

假设文本字段包含“ 20/2/2019”

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"dd/M/yyyy";
NSDate *dt = [formatter dateFromString:self.textField.text];

您还需要实现UITextFieldDelegate方法

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {

  if (self.tFPeriodEndCurrent == textField) {

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"dd/M/yyyy";
    NSDate *dt = [formatter dateFromString:textField.text];

    if (textField.inputView isKindOfClass:[UIDatePicker class]) {
        UIDatePicker *dtPicker = (UIDatePicker *)textField.inputView;
        [dtPicker setDate:dt];
    }
  }
  return TRUE;
}
  

别忘了设置文本字段委托。

快速版本

var dateFormatter: DateFormatter = {
  let formatter = DateFormatter()
  formatter.dateFormat = "dd/MM/yyyy"
  return formatter
}()


func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {

    guard let txtDate = textField.text else { return true }

    if textField == tFPeriodEndCurrent, let dt = dateFormatter.date(from: txtDate) {

        if let datePicker = textField.inputView as? UIDatePicker {

            datePicker.setDate(dt, animated: true)
        }
    }

    return true
}

答案 3 :(得分:0)

如果您要带来相同的UIPickerView外观,请尝试一下

class ViewController: UIViewController {

@IBOutlet weak var dateField: UITextField!
var datePicker :UIDatePicker!

   override func viewDidLoad() {
       super.viewDidLoad()
       datePicker = UIDatePicker.init(frame: CGRect(x: 0, y: 0, width: view.bounds.size.width, height: 200))
       datePicker.addTarget(self, action: #selector(self.dateChanged), for: .allEvents)
       dateField.inputView = datePicker
       let doneButton = UIBarButtonItem.init(title: "Done", style: .done, target: self, action: #selector(self.datePickerDone))
       let toolBar = UIToolbar.init(frame: CGRect(x: 0, y: 0, width: view.bounds.size.width, height: 44))
       toolBar.setItems([UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil), doneButton], animated: true)
       dateField.inputAccessoryView = toolBar
   }

   @objc func datePickerDone() {
       dateField.resignFirstResponder()
   }

   @objc func dateChanged() {
       dateField.text = "\(datePicker.date)"
   }

}

enter image description here