iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0
Mobile Development

Xcode x Swift Vibe coding進階開發之旅系列 第 16

Xcode x Swift Vibe coding進階開發之旅 第十六天 點名系統(9) 增加篩選查看簽到紀錄的人員

  • 分享至 

  • xImage
  •  

說明

增加可以塞選人員的簽到紀錄查看,先手動增加一個pkv值後再加入AI輔助/images/emoticon/emoticon08.gif

指令

用pkv來篩選簽到紀錄的查看的人員 且需要一個選項為所有人 再查看人員資料而不是簽到紀錄時隱藏 我已經建好pkv了 名字是pkvs

心得

若不加最後一段跟AI說我已經建好了AI會幫我把它刪到再見一個連結/images/emoticon/emoticon03.gif

結果

https://ithelp.ithome.com.tw/upload/images/20250930/20168187i4eFXafVbr.png

程式

    @IBOutlet weak var pkvs: UIPickerView!
  
    // 篩選後的簽到記錄
    private var filteredCheckInRecords: Results<CheckInRecord>?
    
    // 用戶數據陣列 (用於 PickerView)
    private var userPickerData: [String] = ["所有人"]
  // 根據當前模式載入對應數據
        if currentDisplayMode == .users {
            loadUsers()
        } else {
            // 加載用戶數據到 PickerView
            loadUserPickerData()
            // 載入所有簽到記錄(預設顯示所有人的記錄)
            loadCheckInRecords()
            // 選擇「所有人」選項
            pkvs.selectRow(0, inComponent: 0, animated: false)
            filterCheckInRecords(forUserIndex: 0)
        }
        
        // 更新 PickerView 的可見性
        updatePickerViewVisibility()
        
 // 設置 PickerView
    private func setupPickerView() {
        // 設置代理和數據源
        pkvs.delegate = self
        pkvs.dataSource = self
        
        // 初始選擇「所有人」選項
        pkvs.selectRow(0, inComponent: 0, animated: false)
    }
     // 載入用戶數據到 PickerView
    private func loadUserPickerData() {
        userPickerData.removeAll()
        userPickerData.append("所有人") // 添加「所有人」選項
        
        if let users = users {
            for user in users {
                userPickerData.append(user.Name)
            }
        }
        
        // 重新載入 PickerView 數據
        pkvs.reloadAllComponents()
    }
    
    // 根據選中的用戶篩選簽到記錄
    private func filterCheckInRecords(forUserIndex index: Int) {
        guard let users = users else { return }
        
        if index == 0 {
            // 如果選擇的是「所有人」,則顯示所有簽到記錄
            filteredCheckInRecords = checkInRecords
        } else {
            // 否則,根據選中的用戶篩選簽到記錄
            let selectedUser = users[index - 1] // 減去 1 是因為索引 0 是「所有人」
            let realm = try! Realm()
            filteredCheckInRecords = realm.objects(CheckInRecord.self).filter("userId == %@", selectedUser.userId).sorted(byKeyPath: "checkInTime", ascending: false)
        }
        
        // 重新載入 TableView 數據
        tbvlist.reloadData()
    }

// MARK: - UIPickerViewDataSource, UIPickerViewDelegate
extension listViewController: UIPickerViewDataSource, UIPickerViewDelegate {
    
    // 返回 PickerView 有幾個區域
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    
    // 返回每個區域的行數
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return userPickerData.count // 使用 userPickerData 而不是直接使用 users
    }
    
    // 返回每一行的內容
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return userPickerData[row] // 從 userPickerData 取得標題
    }
    
    // 行被選中時的處理
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        // 使用 filterCheckInRecords 方法根據選擇的索引篩選記錄
        filterCheckInRecords(forUserIndex: row)
    }
}

/images/emoticon/emoticon07.gif


上一篇
Xcode x Swift Vibe coding進階開發之旅 第十五天 點名系統(8) 增加時間限定
系列文
Xcode x Swift Vibe coding進階開發之旅16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言