Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:使用“完成”按钮在文本框上弹出日期选择器_Ios_Swift_Datepicker - Fatal编程技术网

Ios Swift:使用“完成”按钮在文本框上弹出日期选择器

Ios Swift:使用“完成”按钮在文本框上弹出日期选择器,ios,swift,datepicker,Ios,Swift,Datepicker,我正在创建一个应用程序,上面有一个UITextField,当点击/单击它时,将显示一个日期选择器,它将从底部弹出。所述弹出面板有一个“完成”按钮,该按钮将在单击/点击时将选择的任何日期(默认为今天)应用于文本字段,最好是YYYY-MM-DD格式 我一直在网上搜寻,到目前为止,我已经看到了文本字段的iAction示例,以及关于“完成”按钮如何工作的各种方式(大多数没有“完成”按钮),但我想知道我是否可以回收或基于我的代码创建一个下拉菜单: let wellheadPressTest : [Stri

我正在创建一个应用程序,上面有一个UITextField,当点击/单击它时,将显示一个日期选择器,它将从底部弹出。所述弹出面板有一个“完成”按钮,该按钮将在单击/点击时将选择的任何日期(默认为今天)应用于文本字段,最好是YYYY-MM-DD格式

我一直在网上搜寻,到目前为止,我已经看到了文本字段的iAction示例,以及关于“完成”按钮如何工作的各种方式(大多数没有“完成”按钮),但我想知道我是否可以回收或基于我的代码创建一个下拉菜单:

let wellheadPressTest : [String] = ["PSIG", "MPAG"]
var wellboreStatusPickerView = UIPickerView()

override func viewDidLoad() {
    let wellboreStatusToolBar = UIToolbar()
    let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
    let doneButtonWellbore = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "donePickerWellbore")

    wellboreStatusToolBar.barStyle = UIBarStyle.Default
    wellboreStatusToolBar.translucent = true
    wellboreStatusToolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1)
    wellboreStatusToolBar.sizeToFit()
    wellboreStatusToolBar.setItems([spaceButton,spaceButton,doneButtonWellbore], animated: false)
    wellboreStatusToolBar.userInteractionEnabled = true

    wellboreStatusPickerView.delegate = self
    self.samplingWaterFormOneView.textfieldWellbore.inputView = wellboreStatusPickerView
    self.samplingWaterFormOneView.textfieldWellbore.inputAccessoryView = wellboreStatusToolBar
}


// Various Required PickerView functions

func donePickerWellbore(){
    let row = wellboreStatusPickerView.selectedRowInComponent(0);
    pickerView(wellboreStatusPickerView, didSelectRow: row, inComponent:0)
    self.samplingWaterFormOneView.textfieldWellbore.resignFirstResponder()
}
以下是我尝试过的:

var dateSampledPickerView = UIDatePicker()

override func viewDidLoad() {
    let dateSampledPickerToolBar = UIToolbar()
    let doneButtonDate = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "donePickerDate")
    dateSampledPickerToolBar.barStyle = UIBarStyle.Default
    dateSampledPickerToolBar.translucent = true
    dateSampledPickerToolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1)
    dateSampledPickerToolBar.sizeToFit()
    dateSampledPickerToolBar.setItems([spaceButton,spaceButton,doneButtonDate], animated: false)
    dateSampledPickerToolBar.userInteractionEnabled = true

    dateSampledPickerView.datePickerMode = UIDatePickerMode.Date
    dateSampledPickerView.addTarget(self, action: Selector("datePickerValueChanged"), forControlEvents: UIControlEvents.ValueChanged)

    self.samplingWaterFormOneView.textfieldDateSampled.inputView = dateSampledPickerView
    self.samplingWaterFormOneView.textfieldDateSampled.inputAccessoryView = dateSampledPickerToolBar
    self.samplingWaterFormOneView.textfieldDateSampled.delegate = self
}

func datePickerValueChanged(sender:UIDatePicker) {
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateStyle = "YYYY-MM-DD"
    dateFormatter.timeStyle = NSDateFormatterStyle.NoStyle
    self.samplingWaterFormOneView.textfieldDateSampled.text = dateFormatter.stringFromDate(sender.date)
}

func donePickerDate(){
    self.samplingWaterFormOneView.textfieldDateSampled.resignFirstResponder()
}
我上面的代码确实显示了一个带有日期选择器的弹出式菜单,当我在文本字段顶部加上一个“完成”按钮时,但是文本字段没有得到日期

编辑:还尝试修改
datePickerValueChanged
,使其没有发件人,并对文本字段使用
dateSampledPickerView
。没用

在函数中添加注释表明未调用
datePickerValueChanged
函数


我做错了什么?

我认为没有调用datePickerValueChanged函数,因为您没有设置dateSampledPickerView的委托

所以只要进入

dateSampledPickerView.delegate = self
*********编辑****************

好的,仔细看之后,我相信您设置的动作调用不正确。更换这条线

    dateSampledPickerView.addTarget(self, action: Selector("datePickerValueChanged"), forControlEvents: UIControlEvents.ValueChanged)


删除选择器()

这里有一个带工具栏的日期选择器示例:

var date: NSDate?
var timePicker: UIDatePicker?

@IBOutlet weak var dateLabel: UILabel!

func initDatePicker() {
        if self.timePicker == nil {
            self.timePicker = UIDatePicker()
            self.timePicker!.datePickerMode = UIDatePickerMode.Date
            self.timePicker!.addTarget(self, action: "updateDate", forControlEvents: UIControlEvents.ValueChanged)
            self.timePicker!.minimumDate = NSDate()
            self.timePicker!.backgroundColor = UIColor().backgroundColor()
            self.dateLabel.inputView = self.timePicker
            self.dateLabel.inputAccessoryView = self.createPickerToolBar()
        }
    }

func updateDate() {
        let picker: UIDatePicker = self.dateLabel.inputView as! UIDatePicker
        self.dateLabel.text = picker.date.stringFromDate(kDateFormatSlash)
        self.date = picker.date
        self.delegate?.didIntroduceText(self.actionTextView.text.characters.count != 0 && self.searchableTableView?.getText().characters.count != 0 && self.dateLabel.text!.characters.count != 0)
    }

    func createPickerToolBar() -> UIToolbar {
        let toolbar = UIToolbar()
        let doneButton = UIBarButtonItem(title: "DONE", style: UIBarButtonItemStyle.Done, target: self, action: "doneAction")
        doneButton.setTitleTextAttributes([NSFontAttributeName: UIFont(name: kOpenSansRegular, size: kHeaderFontSize)!, NSForegroundColorAttributeName: UIColor.whiteColor()], forState: UIControlState.Normal)
        doneButton.accessibilityLabel = "DoneToolbar"
        let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
        toolbar.translucent = false
        toolbar.sizeToFit()
        toolbar.setItems([spaceButton, doneButton], animated: false)
        toolbar.userInteractionEnabled = true
        return toolbar
    }

    func doneAction() {
        self.updateDate()
        self.dateLabel.resignFirstResponder()
        self.timePicker?.removeFromSuperview()
    }

嗯。。。我也是这么想的,但显然,
UIDatePicker的值没有成员委托。
。谢谢,这让我有所收获。现在我通过print知道函数正在被调用。但是,它不会更新文本字段。我试着打印出
dateFormatter.stringFromDate(dateSampledPickerView.date)
,但没有得到任何结果。很有趣。是否尝试打印dateSampledPickerView.date或dateFormatter.stringFromDate(sender.date)?还要澄清“完成”按钮是否起作用?与中一样,picker视图消失了吗?我尝试在初始代码中打印dateFormatter.stringFromDate(sender.date),并将一个
无法识别的选择器发送到实例
,以解决我的问题-这发生在更改日期选择器的值时。我想这可能与发件人有关,所以我根据上面的代码删除了它。“完成”按钮起作用,它会使弹出窗口消失,但不会向文本字段写入任何内容。重新添加选择器(“datePickerValueChanged:”),然后(发件人:UIDatePicker)将其修复(冒号显然很重要。不过,我又回到了原点。它打印的是一个空行。我在这里遗漏了一些东西。我有两个文本字段,每个字段都使用日期选择器,我必须复制这些函数来分隔它们。这似乎是错的,即使它有效。我如何告诉doneAction更新一个函数中的正确字段重复而不是重复?您可以向日期选择器和工具栏添加标记
var date: NSDate?
var timePicker: UIDatePicker?

@IBOutlet weak var dateLabel: UILabel!

func initDatePicker() {
        if self.timePicker == nil {
            self.timePicker = UIDatePicker()
            self.timePicker!.datePickerMode = UIDatePickerMode.Date
            self.timePicker!.addTarget(self, action: "updateDate", forControlEvents: UIControlEvents.ValueChanged)
            self.timePicker!.minimumDate = NSDate()
            self.timePicker!.backgroundColor = UIColor().backgroundColor()
            self.dateLabel.inputView = self.timePicker
            self.dateLabel.inputAccessoryView = self.createPickerToolBar()
        }
    }

func updateDate() {
        let picker: UIDatePicker = self.dateLabel.inputView as! UIDatePicker
        self.dateLabel.text = picker.date.stringFromDate(kDateFormatSlash)
        self.date = picker.date
        self.delegate?.didIntroduceText(self.actionTextView.text.characters.count != 0 && self.searchableTableView?.getText().characters.count != 0 && self.dateLabel.text!.characters.count != 0)
    }

    func createPickerToolBar() -> UIToolbar {
        let toolbar = UIToolbar()
        let doneButton = UIBarButtonItem(title: "DONE", style: UIBarButtonItemStyle.Done, target: self, action: "doneAction")
        doneButton.setTitleTextAttributes([NSFontAttributeName: UIFont(name: kOpenSansRegular, size: kHeaderFontSize)!, NSForegroundColorAttributeName: UIColor.whiteColor()], forState: UIControlState.Normal)
        doneButton.accessibilityLabel = "DoneToolbar"
        let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
        toolbar.translucent = false
        toolbar.sizeToFit()
        toolbar.setItems([spaceButton, doneButton], animated: false)
        toolbar.userInteractionEnabled = true
        return toolbar
    }

    func doneAction() {
        self.updateDate()
        self.dateLabel.resignFirstResponder()
        self.timePicker?.removeFromSuperview()
    }