当前位置: 首页 > 面试题库 >

在Swift中设置多次通知

季森
2023-03-14
问题内容

因此,我现在正在使用Swift,并且在激活某个开关的某个时间出现了一条通知。

但是,当另一个开关被激活时,我希望在另一个时间发出另一个通知。

这是我的ViewController代码

 @IBOutlet var myDatePicker: UIDatePicker!

@IBOutlet var mySwitch: UISwitch!

@IBOutlet var mySwitchTwo: UISwitch!


var localNotification:UILocalNotification = UILocalNotification()
var localNotificationTwo:UILocalNotification = UILocalNotification()

func datePicker()            { myDatePicker.datePickerMode = UIDatePickerMode.Date }
func datePickerDefaultDate() { myDatePicker.date = NSDate().xDays(+1) }


func toggleSwitch(){
    if mySwitch.on{
        localNotification.alertAction = "Open App"
        localNotification.alertBody = "Please take your medication."
        localNotification.fireDate = myDatePicker.date.fireDate
        localNotification.repeatInterval = NSCalendarUnit.CalendarUnitDay
        localNotification.timeZone = NSTimeZone.localTimeZone()
        UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
    } else {
        localNotification.alertAction = "Open App"
        localNotification.alertBody = "This notification should not appear"
        localNotification.fireDate = NSDate(timeIntervalSinceNow: 999999999999)
    }
}

func toggleSwitchTwo() {
    if mySwitchTwo.on{
        localNotification.alertAction = "Open App"
        localNotification.alertBody = "Please take your medication."
        localNotification.fireDate = myDatePicker.date.fireDateTwo
        localNotification.repeatInterval = NSCalendarUnit.CalendarUnitDay
        localNotification.timeZone = NSTimeZone.localTimeZone()
        UIApplication.sharedApplication().scheduleLocalNotification(localNotificationTwo)
    } else {
        localNotification.alertAction = "Open App"
        localNotification.alertBody = "This notification should not appear"
        localNotification.fireDate = NSDate(timeIntervalSinceNow: 999999999999)
    }
}


override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func switchPressed(sender: AnyObject) {
    toggleSwitch()
}

@IBAction func switchPressedTwo(sender: AnyObject) {
    toggleSwitchTwo()
}



}

这是第一个快速文件,其中包含第一次切换的时间:

import Foundation
public extension NSDate {
func xDays(x:Int) -> NSDate {
    return NSCalendar.currentCalendar().dateByAddingUnit(.CalendarUnitDay, value: x, toDate: self, options: nil)!
}
var day:            Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitDay,           fromDate: self).day           }
var month:          Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitMonth,         fromDate: self).month         }
var year:           Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitYear,          fromDate: self).year          }
var fireDate: NSDate    { return NSCalendar.currentCalendar().dateWithEra(1, year: year, month: month, day: day, hour: 8, minute: 0, second: 0, nanosecond: 0)! }
 }

我希望下次通知时间是下午1点。这是我为此制作的快速文件:

 import Foundation
 public extension NSDate {
func xDaysTwo(x:Int) -> NSDate {
    return NSCalendar.currentCalendar().dateByAddingUnit(.CalendarUnitDay, value: x, toDate: self, options: nil)!
}
var dayTwo:            Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitDay,           fromDate: self).day           }
var monthTwo:          Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitMonth,         fromDate: self).month         }
var yearTwo:           Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitYear,          fromDate: self).year          }
var fireDateTwo: NSDate    { return NSCalendar.currentCalendar().dateWithEra(1, year: year, month: month, day: day, hour: 13, minute: 0, second: 0, nanosecond: 0)! }
 }

我对此有疑问,在此先感谢您的帮助!


问题答案:
import UIKit

class ViewController: UIViewController {

    @IBOutlet var myDatePicker: UIDatePicker!
    @IBOutlet var mySwitch7am: UISwitch!
    @IBOutlet var mySwitch8am: UISwitch!

    var localNotification7am = UILocalNotification()
    var localNotification8am = UILocalNotification()
    var notificationsCounter = 0

    func datePicker()            { myDatePicker.datePickerMode = UIDatePickerMode.Date }
    func datePickerDefaultDate() { myDatePicker.date = NSDate().hour > 8 ? NSDate().xDays(+1) : NSDate() }

    func notificationsOptions7am() {
        localNotification7am.timeZone = NSTimeZone.localTimeZone()
        localNotification7am.repeatInterval = .CalendarUnitDay
        UIApplication.sharedApplication().scheduleLocalNotification(localNotification7am)
        localNotification7am.alertAction = "Open App"
        localNotification7am.soundName = UILocalNotificationDefaultSoundName
    }
    func notificationsOptions8am() {
        localNotification7am.timeZone = NSTimeZone.localTimeZone()
        localNotification7am.repeatInterval = .CalendarUnitDay
        UIApplication.sharedApplication().scheduleLocalNotification(localNotification8am)
        localNotification7am.alertAction = "Open App"
        localNotification7am.soundName = UILocalNotificationDefaultSoundName
    }
    func toggleSwitch7am(){
        localNotification7am.alertBody = "Here is the seven o'clock notification"
        localNotification7am.fireDate = mySwitch7am.on ? myDatePicker.date.fireDateAt7am         : NSDate().xDays(+36500)
    }
    func toggleSwitch8am(){
        localNotification8am.alertBody = "Here is the eight o'clock notification"
        localNotification8am.fireDate = mySwitch8am.on ? myDatePicker.date.fireDateAt8am         : NSDate().xDays(+36500)
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        datePicker()
        datePickerDefaultDate()
        notificationsOptions7am()
        notificationsOptions8am()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    @IBAction func switchedOn7am(sender: AnyObject) {
        toggleSwitch7am()
    }
    @IBAction func switchedOn8am(sender: AnyObject) {
        toggleSwitch8am()
    }
}

扩充功能:

    import Foundation
    extension NSDate {
        func xDays(x:Int) -> NSDate {
            return NSCalendar.currentCalendar().dateByAddingUnit(.CalendarUnitDay, value: x, toDate: self, options: nil)!
        }
        var day:            Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitDay,           fromDate: self).day           }
        var month:          Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitMonth,         fromDate: self).month         }
        var year:           Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitYear,          fromDate: self).year          }
        var fireDateAt7am: NSDate    { return NSCalendar.currentCalendar().dateWithEra(1, year: year, month: month, day: day, hour: 7, minute: 0, second: 0, nanosecond: 0)! }
        var fireDateAt8am: NSDate    { return NSCalendar.currentCalendar().dateWithEra(1, year: year, month: month, day: day, hour: 8, minute: 0, second: 0, nanosecond: 0)! }
        func fireDateAt(hr:Int, min:Int) -> NSDate {
            return NSCalendar.currentCalendar().dateWithEra(1, year: year, month: month, day: day, hour: hr, minute: min, second: 0, nanosecond: 0)!
        }
    }


 类似资料:
  • 问题内容: 我正在尝试为我的应用程序设置推送通知系统。我有服务器和开发人员许可证来设置推送通知服务。 我目前正在Swift中运行我的应用。我希望能够从服务器远程发送通知。我怎样才能做到这一点? 问题答案: 尽管可以很好地处理推送通知,但我仍然相信可以立即共享完整的完整案例以简化操作: 要注册APNS的应用程序,(在AppDelegate.swift中的didFinishLaunchingWithO

  • 问题内容: 如何在Swift 的子类中将对象添加到关系属性中? 在Objective-C中,当您从数据模型以Xcode 生成子类时,会自动生成一个包含以下声明的类扩展: 但是,Xcode当前缺少Swift类的此类生成功能。 如果我尝试直接在Swift对象上调用等效方法: …我在方法调用中遇到编译器错误,因为这些生成的访问器不可见。 如文档中所述,我已将Relationship属性声明为。 还是我必

  • 我想在不同的情况下芳香地改变一些约束。 声明来自情节提要的约束: 这是我的代码,我想在其中更改约束: 但是约束仍然没有改变。 这是我的手机ForRowAt func: 提前感谢您的帮助!

  • 问题内容: 我正在为iPhone开发一个快速的应用程序。我的应用程序中有一个模式视图,我只想使用纵向视图。 我的问题是,如何以编程方式强制手机不允许旋转?换句话说,我正在寻找的代码不允许以横向模式显示模式视图(打开人像旋转锁定)。 这仅用于1模态视图,因此我无法关闭整个应用程序的旋转,否则我将完全禁用旋转。 我在这里的研究中找到了代码, 但如果有帮助,它在目标C中。谢谢! 问题答案: 您可以将这些

  • 我正在为iPhone开发一个swift应用程序。我的应用程序中有一个模态视图,我只想在纵向视图中。 我的问题是,如何通过编程强制手机不允许旋转?换句话说,我正在寻找不允许在横向模式下显示模式视图的代码(打开纵向旋转锁定)。 这只是一个模态视图,所以我不能关闭整个应用程序的旋转,否则我会完全禁用旋转。 我在这里的研究中发现了代码,但它是在目标C中,以防有所帮助。谢谢

  • 问题内容: 所以我一直在四处寻找屏幕上触摸的坐标。到目前为止,我可以通过以下方式获得一触的坐标: 但是当用两根手指触摸时,我只会得到第一次触摸的坐标。多点触控功能(我用这个小教程进行了测试:http : //www.techotopia.com/index.php/An_Example_Swift_iOS_8_Touch,_Multitouch_and_Tap_Application)。所以我的问