如何在 Swift 的日期选择器上设置本地通知时间


import UIKit
import UserNotifications

class ViewController: UIViewController {
@IBOutlet weak var myDatePicker1: UIDatePicker!
@IBAction func action(_ sender: Any) {
let content = UNMutableNotificationContent()
content.title = "This is a notification"
content.subtitle = "I hope this works"
content.body = "from the tutorial"
content.badge = 1
let componentsFromDate = Calendar.current.dateComponents(in: TimeZone.current, from: myDatePicker1.date)
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: componentsFromDate, repeats: true)
let request = UNNotificationRequest(identifier: "timeDone", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
}

override func viewDidLoad() {
super.viewDidLoad()
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge], completionHandler: {didAllow, error in})
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}

以下是我打印请求和触发器时控制台中显示的内容:

<UNNotificationRequest: 0x6000002335e0; identifier: timeDone, content:
<UNNotificationContent: 0x600000113ef0; title: This is a notification,
subtitle: I hope this works, body: from the tutorial,
categoryIdentifier: , launchImageName: , peopleIdentifiers: ( ),
threadIdentifier: , attachments: ( ), badge: 1, sound: (null),
hasDefaultAction: YES, defaultActionTitle: (null),
shouldAddToNotificationsList: YES,
shouldAlwaysAlertWhileAppIsForeground: NO, shouldLockDevice: NO,
shouldPauseMedia: NO, isSnoozeable: NO, fromSnooze: NO,
darwinNotificationName: (null), darwinSnoozedNotificationName: (null),
trigger: <UNCalendarNotificationTrigger: 0x600000233540;
dateComponents: <NSDateComponents: 0x6000003461a0>
Calendar: <CFCalendar 0x60000009c7a0 [0x10c9fee40]>{identifier = 'gregorian'}
TimeZone: America/Vancouver (PDT) offset -25200 (Daylight)
Era: 1
Calendar Year: 2017
Month: 8
Leap month: no
Day: 11
Hour: 9
Minute: 58
Second: 39
Nanosecond: 0
Quarter: 0
Year for Week of Year: 2017
Week of Year: 32
Week of Month: 2
Weekday: 6
Weekday Ordinal: 2, repeats: YES>>

我是使用 Swift 进行应用程序开发的新手,并且正在尝试创建一个简单的应用程序,当用户选择日期选择器时,该应用程序会向用户发送本地通知。出于某种原因,UNCalenderNotificationTrigger将只采用DateComponents()并且DateComponents()必须是 Int,而不是类型Date()(来自日期选择器(。有人可以帮我吗?谢谢

您可以使用CalendarDate对象获取DateComponents

let componentsFromDate = Calendar.current.dateComponents(in: TimeZone.current, from: Date())

如果将Date()替换为DatePicker中的Date对象,则可以使用该componentsFromDate创建UNCalendarNotificationTrigger

最新更新