iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 18
0
Software Development

利用Swift 4開發iOS App,Daily Work List系列 第 18

Day 18. Develop Edit Event Page View Controller

  • 分享至 

  • xImage
  •  

接著昨天完成了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的部分吧


上一篇
Day 17. Develop Edit Event Page Storyboard
下一篇
Day 19. Develop Week Page Storyboard & View Controller
系列文
利用Swift 4開發iOS App,Daily Work List31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言