功能描述:从数据库读取所有课程信息并显示在表格里,点击显示课程的格子会跳转页面显示该课程的详细信息,点击清空课表会清空表格里所有课程信息并清空数据库,点击加载课程会模拟一节课添加进数据库,然后会读取出来显示出来。清空课表和加载课程可以日后用于更新课表这个功能。
上代码吧。
目录结构如图所示
- Controller两个:ViewController是主控制器,DetailsViewController是课程详细信息控制器
- view有两个:都是UICollectionViewCell,DateCell是用来显示星期和节数的,CourseCell是用来盛放课程格子的,两个都是有xib伴随的
- Model层有一个Course,就是课程对象啦
- 最后还有个工具类dbOperations,是用原生的SQLite3写的,用于数据持久化,要有桥接文件bridging-header.h
Course.swift:
import UIKit
// 课程model
class Course: NSObject, NSCoding {
// MARK: - 课程名称
var courseName: String!
// MARK: - 任课教师
var teacher: String!
// MARK: - 上课教室
var classroom: String!
// MARK: - 起始周
var start: Int!
// MARK: - 结束周
var end: Int!
// MARK: - 上课日期
var day: Int!
// MARK: - 课程总周数
var weeks: Int!
override init() {
}
// MARK: - 编码
func encode(with aCoder: NSCoder) {
aCoder.encode(self.courseName, forKey: "courseName")
aCoder.encode(self.teacher, forKey: "teacher")
aCoder.encode(self.classroom, forKey: "classroom")
aCoder.encode(self.start, forKey: "start")
aCoder.encode(self.end, forKey: "end")
aCoder.encode(self.day, forKey: "day")
aCoder.encode(self.weeks, forKey: "weeks")
}
// MARK: - 初始化时解码
required init?(coder aDecoder: NSCoder) {
super.init()
self.courseName = aDecoder.decodeObject(forKey: "courseName") as! String
self.teacher = aDecoder.decodeObject(forKey: "teacher") as! String
self.classroom = aDecoder.decodeObject(forKey: "classroom") as! String
self.start = aDecoder.decodeObject(forKey: "start") as! Int
self.end = aDecoder.decodeObject(forKey: "end") as! Int
self.day = aDecoder.decodeObject(forKey: "day") as! Int
self.weeks = aDecoder.decodeObject(forKey: "weeks") as! Int
}
}
DateCell:
DateCell.swift
import UIKit
// 左边和上边的日期cell
class DateCell: UICollectionViewCell {
// MARK: - 右边框
@IBOutlet weak var rightBorder: UIView!
// MARK: - 下边框
@IBOutlet weak var buttonBorder: UIView!
// MARK: - 日期label
@IBOutlet weak var dateLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
}
DateCell.xib:
CourseCell.swift:
import UIKit
// 课程cell
class CourseCell: UICollectionViewCell {
// MARK: - 课程label
@IBOutlet weak var courseLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
}
Course.xib:
Course.swift:
import UIKit
// 课程model
class Course: NSObject, NSCoding {
// MARK: - 课程名称
var courseName: String!
// MARK: - 任课教师
var teacher: String!
// MARK: - 上课教室
var classroom: String!
// MARK: - 起始周
var start: Int!
// MARK: - 结束周
var end: Int!
// MARK: - 上课日期
var day: Int!
// MARK: - 课程总周数
var weeks: Int!
override init() {
}
// MARK: - 编码
func encode(with aCoder: NSCoder) {
aCoder.encode(self.courseName, forKey: "courseName")
aCoder.encode(self.teacher, forKey: "teacher")
aCoder.encode(self.classroom, forKey: "classroom")
aCoder.encode(self.start, forKey: "start")
aCoder.encode(self.end, forKey: "end")
aCoder.encode(self.day, forKey: "day")
aCoder.encode(self.weeks, forKey: "weeks")
}
// MARK: - 初始化时解码
required init?(coder aDecoder: NSCoder) {
super.init()
self.courseName = aDecoder.decodeObject(forKey: "courseName") as! String
self.teacher = aDecoder.decodeObject(forKey: "teacher") as! String
self.classroom = aDecoder