接著昨天完成了Storyboard的部分,今天來完成View Controller吧!
基本上的內容都跟Add Event Page一樣,包含地址換算座標、Picker的協定.....等等,所以就都複製過來就好XD
唯二要改變的地方是就是viewDidLoad()要多去查詢該Event的資料和儲存資料時的內容
首先,昨天我們在present EditEventViewController之前有把id設定到event_id這個變數裡面,所以我們就可以利用這個變數來撈取資料,先在viewDidLoad()裡增加呼叫initData(),接著來實作
func initData() {
if event_id != nil {
// 讀取Event資料
let eventArray = sqlManager.queryEventById(id: event_id!)
if eventArray.count == 1 {
// 將名稱填入TextField
nameText.text = eventArray[0].name
// 將資料庫的內容轉型,YYYYMMDD -> YYYY-MM-DD
let date = dateFormatter.date(from: eventArray[0].day)!
dateLabel.text = showDateFormatter.string(from: date)
// 將資料庫的內容轉型,HHMM -> HH:mm
if eventArray[0].time != nil && eventArray[0].time != "" {
timePicker.date = timeFormatter.date(from: eventArray[0].time!)!
changeExecTime()
}
// 設定選取的category
if let codeIndex = pickerData.index(where: {$0.code == eventArray[0].category}) {
categoryCode = pickerData[codeIndex].code
categoryPicker.text = pickerData[codeIndex].name
self.pickerView.selectRow(codeIndex, inComponent: 0, animated: false)
}
// 將是否需要提醒與是否完成的開關設定
reminderSwitch.isOn = eventArray[0].reminder
finishSwitch.isOn = eventArray[0].finish
// 將地址填入TextField
placeText.text = eventArray[0].place
// 設定經緯度
lat = eventArray[0].lat
lng = eventArray[0].lng
// 將Note填入Text View中
noteText.text = eventArray[0].note
} else {
confirmAlert("Error when get the event info!")
dismiss(animated: true, completion: nil)
}
} else {
confirmAlert("Cannot get the event info!")
dismiss(animated: true, completion: nil)
}
}
再來,調整save()功能,因為編輯狀態少掉了重複、結束日等等,所以判斷少了很多,只需要確認Name不為空就好,接著用update的方式異動資料庫即可
@IBAction func save(_ sender: UIBarButtonItem) {
if nameText.text! == "" {
confirmAlert("Name is required!")
} else {
// 若有設定時間,才寫入HHMi格式,否則為nil
var execTimeText: String? = nil
if execTime.text != "" {
execTimeText = timeFormatter.string(from: timePicker.date)
}
sqlManager.updateEventById(id: event_id!, name: nameText.text!, time: execTimeText, category: categoryCode, reminder: reminderSwitch.isOn, place: placeText.text, lat: lat, lng: lng, note: noteText.text, finish: finishSwitch.isOn)
dismiss(animated: true, completion: nil)
}
}
最後在SQLiteManager.swift中也加入對應的功能,就完成了喔!
func updateEventById(id: Int64, name: String, time: String?, category: Int, reminder: Bool, place: String?, lat: Double?, lng: Double?, note: String, finish: Bool) {
do {
let item = TB_EVENT.filter(TB_EVENT_ID == id)
if try database.run(item.update(TB_EVENT_NAME <- name, TB_EVENT_TIME <- time, TB_EVENT_CATEGORY <- category, TB_EVENT_REMINDER <- reminder, TB_EVENT_PLACE <- place, TB_EVENT_LAT <- lat, TB_EVENT_LNG <- lng, TB_EVENT_NOTE <- note, TB_EVENT_FINISH <- finish)) > 0 {
print("update event")
}
} catch {
}
}
也是快很多吧!
這邊先說一下,我知道關於Media的三個按鈕還沒有實作,那個我放後面一點,先把其他東西都刻出來後再來做
明天先開發Week的部分吧