使用 UIStepper 进行 UILocalNotification 的时间

Time for UILocalNotification using UIStepper

需要每天定时发送提醒。使用 UIStepper 以 1 到 24 小时的格式设置时间。修改了代码,还是不行,DO NOT COME NOTICES

var hour = 0.0
let notification = UILocalNotification()
@IBOutlet weak var remindStepper: UIStepper!
@IBOutlet weak var remindLabel: UILabel!
@IBOutlet weak var remindSwitch: UISwitch!

在viewDidLoad()中

remindStepper.wraps = true
remindStepper.value = hour
remindStepper.minimumValue = 0
remindStepper.maximumValue = 24
if NSUserDefaults.standardUserDefaults().objectForKey("hour") != nil  { hour = NSUserDefaults.standardUserDefaults().objectForKey("hour") as! Double }

if NSUserDefaults.standardUserDefaults().objectForKey("remindOnOff") != nil  { remindOnOff = NSUserDefaults.standardUserDefaults().objectForKey("remindOnOff") as! Bool
}
    if remindOnOff == true {
        remindSwitch.on = true
    } else {
        remindSwitch.on = false
    }
    remindLabel.text = "\(Int(hour)):00"

然后创建

func setEveryDayNotification(){

  let calendar = NSCalendar.currentCalendar()
  var dateFire = NSDate()
  let components = calendar.components(.Hour,fromDate: dateFire)
  components.calendar = calendar
  components.hour = Int(hour)
  dateFire = calendar.dateFromComponents(components)!

  notification.alertTitle = "alert title"
  notification.alertBody = "alert body"
  notification.soundName = UILocalNotificationDefaultSoundName
  notification.alertAction = "Run the workout"
  notification.timeZone = NSTimeZone.defaultTimeZone()
  notification.fireDate = components.date
  notification.repeatInterval = NSCalendarUnit.Day
  UIApplication.sharedApplication().scheduleLocalNotification(notification)
 }
@IBAction func remindStepper(sender: UIStepper) {
    NSUserDefaults.standardUserDefaults().setObject(Int(sender.value), forKey: "hour")
    NSUserDefaults.standardUserDefaults().synchronize()
    remindLabel.text = "\(Int(sender.value).description):00"
    UIApplication.sharedApplication().cancelLocalNotification(notification)
    remindOnOff = false
    remindSwitch.on = false
    NSUserDefaults.standardUserDefaults().setBool(remindOnOff, forKey: "remindOnOff")
}
    @IBAction func remindSwitch(sender: UISwitch) {
    if remindSwitch.on {
        setEveryDayNotification()
        remindOnOff = true
        NSUserDefaults.standardUserDefaults().setBool(remindOnOff, forKey: "remindOnOff")
    } else {
        remindOnOff = false
        UIApplication.sharedApplication().cancelLocalNotification(notification)
        NSUserDefaults.standardUserDefaults().setBool(remindOnOff, forKey: "remindOnOff")
    }

}

您当前的代码将年份更改为 0000,因此您的通知未在正确的时间设置

您可以查看以下代码,替换当前代码

 let calendar = NSCalendar.currentCalendar()
  var dateFire = NSDate()
  let components = calendar.components(.Hour,fromDate: dateFire)
  components.calendar = calendar
  components.hour = Int(hour)
  dateFire = calendar.dateFromComponents(components)! 

使用以下代码

let calendar = NSCalendar.currentCalendar()
calendar.timeZone = NSTimeZone.localTimeZone()
let dateFire = NSDate()
let newDate = calendar.dateBySettingHour(Int(hour), minute:00, second:00, ofDate: dateFire, options:NSCalendarOptions())

并且在通知火灾数据时使其像这样

notification.fireDate = newDate

如果您放置此代码,您的本地通知应该被设置

注意: 根据您当前的代码,每次步进器值更改时您都会调用 setEveryDayNotification,因此它将设置每小时的通知在步进器值上,而不是你应该制作单独的按钮,它可以获得步进器当前值并仅为当前选定的小时设置通知。