首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何让用户选择日历事件的时间和日期-swift?

如何让用户选择日历事件的时间和日期-swift?
EN

Stack Overflow用户
提问于 2018-08-08 02:00:12
回答 1查看 0关注 0票数 0

因此,我试图添加一个功能到我的应用程序,你可以添加一个日历事件。但是,我在时间和日期设置上有问题。我有一个文本开始日期和开始时间和结束日期。我遇到的问题是,当我在startDate和endDatetextField中输入日期时,输入的日期将是事件的开始日期和结束日期。另外,我也遇到了无法使startTime和EndTime正常工作的问题,因此输入的时间将是事件的开始和结束时间。代码如下。

@IBOutlet weak var eventNameTextField: UITextField!
@IBOutlet weak var descriptionTextField: UITextField!
@IBOutlet weak var startDateTextField: UITextField!
@IBOutlet weak var endDateTextField: UITextField!

@IBAction func doneButton(_ sender: Any) {
    addEventToCalendar(title: eventNameTextField.text!, description: descriptionTextField.text!, startDate: startDateTextField.text!, endDate: endDateTextField.text!)
}


let datePicker1 = UIDatePicker()
let datePicker2 = UIDatePicker()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.

    startDateTextField.delegate = self
    endDateTextField.delegate = self

    createDatePicker1()
    createDatePicker2()

    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(CalculatorViewController.textFieldShouldReturn))
    view.addGestureRecognizer(tap)

}

func createDatePicker1(){

    //assign datepicker to our textfield
    startDateTextField.inputView = datePicker1
    datePicker1.datePickerMode = .dateAndTime

    //create a toolbar
    let toolbar = UIToolbar()
    toolbar.sizeToFit()

    //add a done button on this toolbar
    let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(doneClicked1))

    toolbar.setItems([doneButton], animated: true)

    startDateTextField.inputAccessoryView = toolbar
    endDateTextField.inputAccessoryView = toolbar
}

func createDatePicker2(){

    //assign datepicker to our textfield
    endDateTextField.inputView = datePicker2
    datePicker2.datePickerMode = .dateAndTime

    //create a toolbar
    let toolbar = UIToolbar()
    toolbar.sizeToFit()

    //add a done button on this toolbar
    let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(doneClicked2))

    toolbar.setItems([doneButton], animated: true)

    endDateTextField.inputAccessoryView = toolbar
}

@objc func doneClicked1(){

    let dateFormatter = DateFormatter()
    dateFormatter.dateStyle = .medium
    dateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZZZ"
    dateFormatter.timeStyle = .short

    startDateTextField.text = dateFormatter.string(from: datePicker1.date)
    self.view.endEditing(true)

}

@objc func doneClicked2(){

    let dateFormatter = DateFormatter()
    dateFormatter.dateStyle = .medium
    dateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZZZ"
    dateFormatter.timeStyle = .short

    endDateTextField.text = dateFormatter.string(from: datePicker2.date)
    self.view.endEditing(true)

}

func addEventToCalendar(title: String, description: String?, startDate: Date, endDate: Date, completion: ((_ success: Bool, _ error: NSError?) -> Void)? = nil) {
    let eventStore = EKEventStore()

    eventStore.requestAccess(to: .event, completion: { (granted, error) in
        if (granted) && (error == nil) {
            let event = EKEvent(eventStore: eventStore)
            event.title = title
            event.startDate = startDate
            event.endDate = endDate
            event.notes = description
            event.calendar = eventStore.defaultCalendarForNewEvents
            do {
                try eventStore.save(event, span: .thisEvent)
            } catch let e as NSError {
                completion?(false, e)
                return
            }
            completion?(true, nil)
        } else {
            completion?(false, error as NSError?)
        }
    })
}

/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // Get the new view controller using segue.destination.
    // Pass the selected object to the new view controller.
}
*/
EN

回答 1

Stack Overflow用户

发布于 2018-08-08 11:26:58

看起来,你正在设计自己的界面,让用户输入事件的时间和日期。不要这样做。这是EKEventEditViewController的用途。它直接从Calendar应用程序向你提供事件编辑界面。可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100002008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档