2017-05-31 21 views
0

我已經讀了How to use selected value of UIPickerView as time interval for notifications?一遍又一遍,但我不知道如何將答案應用於我的情況。如何將UIPickerView的選定值用作通知的content.sound?

基本上,我用兩個選項編碼了選取器視圖。我不知道該怎麼

1)使每個挑選視圖行對應於一定的報警聲
2)使content.sound可以是兩種報警聲選擇一個變量。

我的Assets.xcassets中已經有兩個聲音文件了,我只是不知道如何將它編程到鬧鐘中。

這是我到目前爲止的代碼:

@IBOutlet weak var soundPickerView: UIPickerView! 

let sounds = ["chirping birds", "flowing water"] 

func numberOfComponents(in pickerView: UIPickerView) -> Int 
{ 
    return 1 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? 
{ 
    return sounds[row] 
} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
{ 
    return sounds.count 
} 


func scheduleNotification(at date: Date) { 
    let calendar = Calendar(identifier: .gregorian) 
    let components = calendar.dateComponents(in: .current, from: date) 
    let newComponents = DateComponents(calendar: calendar, timeZone: .current, month: components.month, day: components.day, hour: components.hour, minute: components.minute) 
    let trigger = UNCalendarNotificationTrigger(dateMatching: newComponents, repeats: false) 
    let content = UNMutableNotificationContent() 
    content.title = " wake up call " 
    content.body = "Time to wake up!" 
    content.sound = UNNotificationSound(named: "Morning Birds.aiff") 

還有其他代碼的通知要求等,但以上僅僅是相關的代碼。最後一行代碼是我知道需要修改的代碼。

回答

0

我想你需要這樣的東西:

class ViewController: UIViewController, UIPickerViewDelegate, 
     UIPickerViewDataSource { 
     @IBOutlet weak var soundPickerView: UIPickerView! 

     override func viewDidLoad() { 
      super.viewDidLoad() 
      // 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. 
     } 

     let dic = [ 
      "chirping birds" : "MorningBirdsFile.aiff" 
      ,"flowing water" : "FlowingWaterFile.aiff" 
     ] 

     func numberOfComponents(in pickerView: UIPickerView) -> Int 
     { 
      return 1 
     } 

     func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? 
     { 
      return Array(dic)[row].key 
     } 

     func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
     { 
      return dic.count 
     } 

     func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
      let calendar = Calendar(identifier: .gregorian) 
      let components = calendar.dateComponents(in: .current, from: date) 
      let newComponents = DateComponents(calendar: calendar, timeZone: .current, month: components.month, day: components.day, hour: components.hour, minute: components.minute) 
      let trigger = UNCalendarNotificationTrigger(dateMatching: newComponents, repeats: false) 
      let content = UNMutableNotificationContent() 
      content.title = " wake up call " 
      content.body = "Time to wake up!" 
      content.sound = UNNotificationSound(named: Array(dic)[row].value) 


      print(Array(dic)[row].value) 
     } 
    } 

,或者你可以選擇器視圖的值,並將其存儲在某個變量,當用戶確認將其設置爲你的日曆。

+0

非常感謝你的解釋!我試圖實現這個,不幸的是,最後兩行代碼中出現錯誤「使用未解析標識符」行。 – jfjldsfjljfkls

+0

你有沒有把你的類委託給'UIPickerViewDelegate'看看我的代碼的第一行。如果我按照原樣複製並粘貼這段代碼,它就像一個魅力一樣工作 – GIJOW

+0

我創建了一個新項目來自己測試這段代碼,並確保我的ViewController.swift文件包含「class ViewController:UIViewController,UIPickerViewDelegate,UIPickerViewDataSource」,但現在我'得到錯誤'使用未解析的標識符'日期'「。 – jfjldsfjljfkls

相關問題