iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 11
1
Mobile Development

iOS APP 使用Swift打造一個外送平台APP (以foodpanda、Uber Eats為例) 系列 第 12

[Day 11] Swift 徵 幫寫 手機app - 模糊收尋 NSPredicate Like (上)

  • 分享至 

  • xImage
  •  

簡要

最近在版上看到有人在徵外包
感到非常有興趣
因為沒有價格限制
以及看起來火藥味濃厚的留言回答
原以為只是來引戰的
沒想到其實有本身有特殊原因
所以需要這些功能

剛好我程式也剛在學
看起來好像也不難
就讓我用破破的程式
短時間看能不能搓出來

https://ithelp.ithome.com.tw/upload/images/20190926/20112271Ii4RNXbKjd.png

正題

客戶想要一個能記錄事情
一次紀錄 然後APP能幫忙分類tag

https://ithelp.ithome.com.tw/upload/images/20190926/20112271XSceZjUT0c.png

這裏我會列出的我不會的程式碼
簡單的或是之前講得的只會帶過

這裡我想做三個畫面

  • 個人行程 : 顯示目前的行程 使用tableView section 分類個個tag
  • Tag頁面 : 顯示現在的tag+底下符合的文字 (如: 唱歌 自動分類 娛樂)
  • 新增Tag : 希望能點選以前有新增的tag 然後新增新文字 / 如果是新tag 新開一個tag

基本設定

設置兩個controller
並且將 navigation + tabBar + baseController 先實作起來
可以參考我之前的文章
[Day 3] Swift 使用TabBar+NavigationBar

Demo

rightBarButtonItem

rightBarButtonItem 這裡使用兩種

  • 顯示圖片
  • 顯示文字

文字

navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Save", style: .plain, target: self, action: #selector(self.isClickNavigationBtn))

https://ithelp.ithome.com.tw/upload/images/20190926/201122712lo8WXMJx4.png

圖片

let navigationBtn = UIBarButtonItem(image: UIImage(named: "plus"), style: .plain, target: self, action: #selector(self.isClickNavigationBtn))
        self.navigationItem.rightBarButtonItem  = navigationBtn

https://ithelp.ithome.com.tw/upload/images/20190926/20112271CUlOdp1pZ1.png

action 點擊事件可以連動到自己的func

// MARK: - UIButton Methods
    @objc func isClickNavigationBtn() {
    }

navigationController 跳轉頁面

這邊紀錄一下 navigationController 跳轉頁面
AddTagViewController 可以替換成你自己的 controller
animated 動畫部分看你要不要開

self.navigationController?.pushViewController(AddTagViewController(), animated: true)

navigationController 頁面返回

除了左上角返回按以外
在已跳轉的controller裡面
如果要返回可以用 popToRootViewController
animated 動畫部分看你要不要開

navigationController?.popToRootViewController(animated: true)

# 新增tag頁面

這邊的想法是這樣 設置兩個textView
一個是文字 ㄧ個是tag
並且下方有tableView 顯示之前的 有歷史紀錄tag
點擊後將tag 複製到 textView上面

Demo
https://ithelp.ithome.com.tw/upload/images/20190926/201122718MIK2I1V11.png

本來是用dictionary作儲存
這是我得格式如下

["娛樂": ["看影片"], "課業": ["作業"], "社交": ["喝酒"]]

我發現Swiftdictionary 並沒有順序
每次呼叫出來都會不一樣
造成我的tableView 與 點擊沒辦法對起來
tableView reload也會一直亂跑
後來使用model才解決這個問題

宣告

struct Objects {
   var sectionName : String!
   var sectionObjects : [String]!
}
var objectArray = [Objects]()

將dictionary 塞進去

func objectArrayInit (){
    objectArray = [Objects]()
    print(objectArray)
    for (key, value) in tagArr {
        objectArray.append(Objects(sectionName: key, sectionObjects: value))
    }
}

tableview 的相關設置如下

//section count 數量
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return objectArray[section].sectionObjects.count
}
//tableView count 數量
func numberOfSections(in tableView: UITableView) -> Int {
    return objectArray.count
}
//section title 設定
func tableView(_ tableView: UITableView,
  titleForHeaderInSection section: Int) -> String? {
    let title = objectArray[section].sectionName
    return title
}
//cellForRowAt 設定
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell:StrokeCell = tableView.dequeueReusableCell(withIdentifier: "myCell")
        as! StrokeCell
    cell.strokeLabel.text = objectArray[indexPath.section].sectionObjects[indexPath.row]
    return cell
    
}

Demo

看起來好像挺不錯的
Tag部分應該是完成了
剩下行程表+新增行程

行程表

這裡我先作一個tableView 而已
因為要先新增行程
新增完以後要用模糊搜尋再分類

https://ithelp.ithome.com.tw/upload/images/20190926/20112271zRScc7rWxS.png

新增行程

alert text field

swift alert 簡易使用之前文章有寫過
可以參考這篇
[Day 13] Swift Alert 初體驗 && Date 時間簡易使用
但這是有需要用到輸入法
以下是alert text field寫法

// 建立一個提示框
    let alertController = UIAlertController(
        title: "訊息",
        message: "請輸入行程",
        preferredStyle: .alert)

    // 建立輸入框
alertController.addTextField {
        (textField: UITextField!) -> Void in
        textField.placeholder = "行程"
    }

    // 建立[取消]按鈕
    let cancelAction = UIAlertAction(
      title: "取消",
      style: .cancel,
      handler: nil)
    alertController.addAction(cancelAction)

    // 建立[新增]按鈕
    let okAction = UIAlertAction(
      title: "新增",
      style: UIAlertAction.Style.default) {
        (action: UIAlertAction!) -> Void in
        let strokeAlert =
          (alertController.textFields?.first)!
            as UITextField
            //strokeAlert.text 是你的輸入文字
        self.fuzzySearch(strokeText: strokeAlert.text!)
      }
    alertController.addAction(okAction)

    // 顯示提示框
self.present(
      alertController,
      animated: true,
      completion: nil)

Demo

目前因為時間的關係先做到這邊
明天會把模糊搜尋跟行程分類做完
挑戰失敗


上一篇
[Day 10] Swift 新增 tableview+collectionView Cell 實現上下左右都可以滑
下一篇
[Day 12] Swift 徵 幫寫 手機app - 模糊收尋 NSPredicate Like ( 下 )
系列文
iOS APP 使用Swift打造一個外送平台APP (以foodpanda、Uber Eats為例) 31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言