gpt4 book ai didi

来自 datePicker 的 Swift 通知触发

转载 作者:搜寻专家 更新时间:2023-10-31 22:33:55 24 4
gpt4 key购买 nike

我想将我的 datePicker 的日期设置为本地通知 fireDate。我从 another answer at S.O. 中找到了该代码:

      @IBOutlet var myDatePicker: UIDatePicker!
@IBOutlet var mySwitch: UISwitch!

var localNotification = UILocalNotification() // You just need one
var notificationsCounter = 0

// put your functions now
func datePicker() { myDatePicker.datePickerMode = UIDatePickerMode.Time }
func notificationsOptions() {
localNotification.timeZone = NSTimeZone.localTimeZone()
localNotification.repeatInterval = .CalendarUnitDay
UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
localNotification.alertAction = "Open App"
localNotification.alertBody = "Here is the seven o'clock notification"
localNotification.soundName = UILocalNotificationDefaultSoundName
localNotification.applicationIconBadgeNumber = UIApplication.sharedApplication().applicationIconBadgeNumber + 1
// you may add arbitrary key-value pairs to this dictionary.
// However, the keys and values must be valid property-list types
// if any are not, an exception is raised.
// localNotification.userInfo = [NSObject : AnyObject]?
}
func toggleSwitch(){
if mySwitch.on{
localNotification.fireDate = myDatePicker.date
} else {
localNotification.fireDate = NSDate(timeIntervalSinceNow: 999999999999) // will never be fired
}
}
override func viewDidLoad() {
super.viewDidLoad()
datePicker()
notificationsOptions()
// Do any additional setup after loading the view, typically from a nib.
}

但它不起作用,即使一切看起来都是正确的...问题出在哪里??

最佳答案

像这样尝试:

class ViewController: UIViewController {

@IBOutlet var datePicker: UIDatePicker!
@IBOutlet var notificationSwitch: UISwitch!

let localNotification = UILocalNotification()

override func viewDidLoad() {
super.viewDidLoad()
setUpNotificationsOptions()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()

}

func setUpNotificationsOptions() {
datePicker.datePickerMode = .Time
localNotification.timeZone = NSTimeZone.localTimeZone()
localNotification.repeatInterval = .Day
localNotification.alertAction = "Open App"
localNotification.alertBody = "a notification"
localNotification.soundName = UILocalNotificationDefaultSoundName
}

func toggleNotification() {
if notificationSwitch.on {
localNotification.fireDate = datePicker.date.fireDate
UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
} else {
localNotification.fireDate = nil
UIApplication.sharedApplication().cancelLocalNotification(localNotification)
}
}
@IBAction func toggleSwitch(sender: UISwitch) {
toggleNotification()
}
@IBAction func dateChanged(sender: UIDatePicker) {
toggleNotification()
}
}

您将需要这些扩展:

extension NSDate {
var minute: Int {
return NSCalendar.currentCalendar().component(.Minute, fromDate: self)
}
var hour: Int {
return NSCalendar.currentCalendar().component(.Hour, fromDate: self)
}
var day: Int {
return NSCalendar.currentCalendar().component(.Day, fromDate: self)
}
var month: Int {
return NSCalendar.currentCalendar().component(.Month, fromDate: self)
}
var year: Int {
return NSCalendar.currentCalendar().component(.Year, fromDate: self)
}
var fireDate: NSDate {
let today = NSDate()
return NSCalendar.currentCalendar().dateWithEra(1,
year: today.year,
month: today.month,
day: { hour > today.hour || (hour == today.hour
&& minute > today.minute) ? today.day : today.day+1 }(),
hour: hour,
minute: minute,
second: 0,
nanosecond: 0
)!
}
}

关于来自 datePicker 的 Swift 通知触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34246572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com