本篇文章將說明 MainViewController.swift
的設計思路,重點在於 鬧鐘列表顯示 與 UI 功能控制。
import UIKit
import RealmSwift
import UserNotifications
@IBOutlet weak var tbvData: UITableView!
var alarms: [AlarmData] = []
var isEdting: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
setUI()
setupNavigationBar()
requestNotificationPermission()
NotificationCenter.default.addObserver(
self,
selector: #selector(showAlarmAlert(_:)),
name: NSNotification.Name("AlarmDidFire"),
object: nil
)
}
AlarmDidFire
,用於鬧鐘響起提醒。func setupNavigationBar() {
navigationController?.navigationBar.barTintColor = .systemGray6
navigationItem.rightBarButtonItem = UIBarButtonItem(
image: UIImage(systemName: "plus"),
style: .plain,
target: self,
action: #selector(addTapped)
)
navigationItem.leftBarButtonItem = UIBarButtonItem(
title: "編輯",
style: .plain,
target: self,
action: #selector(editTapped)
)
navigationController?.navigationBar.prefersLargeTitles = true
navigationItem.title = "鬧鐘"
}
func setUI() {
tbvData.dataSource = self
tbvData.delegate = self
tbvData.register(UINib(nibName: "MainTableViewCell", bundle: nil), forCellReuseIdentifier: "MainTableViewCell")
}
@objc func addTapped() {
let addAlarmVC = AddAlarmViewController()
addAlarmVC.delegate = self
let navController = UINavigationController(rootViewController: addAlarmVC)
self.present(navController, animated: true)
}
AddAlarmViewController
。@objc func editTapped() {
isEdting.toggle()
tbvData.setEditing(isEdting, animated: true)
navigationItem.leftBarButtonItem?.title = isEdting ? "完成" : "編輯"
tbvData.visibleCells.forEach { cell in
if let switchControl = (cell as? MainTableViewCell)?.swTime {
switchControl.isHidden = isEdting
}
}
}
今天我們完成了 MainViewController 的 UI 功能:
下一篇(Day16)會進一步處理 資料操作與通知功能,讓鬧鐘真正能「新增、刪除、響起」。