2017-08-10 92 views
0

我想在我的應用程序中添加本地通知。我正在填寫textfields中的信息,並在爲考試選擇的特定日期之前設置datetime and reminder。任何人都可以實施這樣的演示,然後請告訴我該怎麼做。設置本地通知前1天或前2天swift 3

+0

看這個https:/ /www.youtube.com/watch?v=CnvqLqoG4JM –

回答

0

答案是基於我所瞭解的內容,請根據您的要求更改時間和提醒字符串。

func scheduleNotification(InputUser:String) { 

let now: NSDateComponents = NSCalendar.currentCalendar().components([.Hour, .Minute], fromDate: NSDate()) 

let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! 
let date = cal.dateBySettingHour(now.hour, minute: now.minute + 1, second: 0, ofDate: NSDate(), options: NSCalendarOptions()) 
let reminder = UILocalNotification() 
reminder.fireDate = date 
reminder.alertBody = InputUser 
reminder.alertAction = "Cool" 
reminder.soundName = "sound.aif" 
reminder.repeatInterval = NSCalendarUnit.Minute 




UIApplication.sharedApplication().scheduleLocalNotification(reminder) 

print("Firing at \(now.hour):\(now.minute+1)") 

}

0

設置每日基本的本地通知前1天,或者您也可以與特定日期的幫助下雨燕3.1


import UIKit 
import UserNotifications 

fileprivate struct AlarmKey{ 
    static let startWorkIdentifier = "com.Reminder.Notification" //Add your own Identifier for Local Notification 
    static let startWork = "Ready for work? Toggle To \"Available\"." 
} 


class AlarmManager: NSObject{ 

    static let sharedInstance = AlarmManager() 

    override init() { 
     super.init() 
    } 

    //MARK: - Clear All Previous Notifications 
    func clearAllNotifications(){ 
     if #available(iOS 10.0, *) { 
      UNUserNotificationCenter.current().removeAllPendingNotificationRequests() 
     } else { 
      UIApplication.shared.cancelAllLocalNotifications() 
     } 
    } 

    func addReminder(with _ hour: Int, minutes: Int){ 
     clearAllNotifications() 

     var dateComponent = DateComponents() 
     dateComponent.hour = hour // example - 7 Change you time here Progrmatically 
     dateComponent.minute = minutes // example - 00 Change you time here Progrmatically 


     if #available(iOS 10.0, *) { 
      dateComponent.timeZone = TimeZone.autoupdatingCurrent 

      let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponent, repeats: false) //Set here **Repeat** condition 

      let content = UNMutableNotificationContent() 
      content.body = AlarmKey.startWork //Message Body 
      content.sound = UNNotificationSound.default() 

      let notification = UNNotificationRequest(identifier: AlarmKey.startWorkIdentifier, content: content, trigger: trigger) 
      UNUserNotificationCenter.current().delegate = self 
      UNUserNotificationCenter.current().add(notification) {(error) in 
       if let error = error { 
        print("Uh oh! We had an error: \(error)") 
       } 
      } 
     } else { 
      //iOS *9.4 below if fails the Above Condition.... 
      dateComponent.timeZone = NSTimeZone.system 
      let calender = NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)! 
      let date = calender.date(from: dateComponent)! 
      let localNotification = UILocalNotification() 
      localNotification.fireDate = date 
      localNotification.alertBody = AlarmKey.startWork 
      localNotification.repeatInterval = NSCalendar.Unit.day 
      localNotification.soundName = UILocalNotificationDefaultSoundName 
      UIApplication.shared.scheduleLocalNotification(localNotification) 
     } 
    } 
} 

修改它
//This is optional method if you want to show your Notification foreground condition 
extension AlarmManager: UNUserNotificationCenterDelegate{ 
    @available(iOS 10.0, *) 
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Swift.Void){ 
     completionHandler([.alert,.sound]) 
    } 
}