Swift

日常踩坑

Swift

Swift 强大的 enum - 枚举UIColor

在最近的项目中遇到了这样一个问题,需要枚举 UIColor,但是 Swift enum raw value 不能是 UIColor 类型,因此去网上看到了一个个人感觉很方便的解决方法。 // RGBA 16进制数 enum Colors: UInt32 { case red = 0xFF3B30FF case yellow = 0xFFCC00FF case blue = 0x007AFFFF case green = 0x4CD964FF case purple = 0x5856D6FF case lightBlue = 0x5AC8FAFF case brown = 0xB97437FF case white = 0xFFFFFFFF case black = 0x000000FF

Swift

踩坑之UIPopoverPresentationController

从 iOS 8 开始 popoverController 就变成 UIPopoverPresentationController, 由于最近的项目中用到了UIPopoverPresentationController, 因此出于备忘的目的,在此记录下我踩过的坑。 UIPopoverPresentationController 大小自适应 UIPopoverPresentationController大小自适应可以通过修改UITableViewController的preferredContentSize属性来进行实现,首先在UITableViewController代码文件中,override 三个方法,如下: override func viewWillAppear() { self.tableView.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil) } override func observerValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]

算法

Swift 实现多叉树遍历

仅实现深度遍历,首先需要一个队列Queue,用于保存需要遍历的多叉树节点。算法流程: var depth: Int = 0 var queue = [PDFOutline]() // 多叉树遍历队列 var tempOutlineMember: outlineMember queue.append(rootOutline) // 多叉树顶点入队 // 多叉树广度优先遍历 while(queue.count != 0) { var index: Int = 0 let node = queue.remove(at: 0) // 队列的队头元素出队 var childNode = node.child(at: index) // 子节点为父节点的第一个邻节点 while(childNode

Swift

踩坑之自定义UITableViewCell的缩进

需要实现自定义UITableViewCell的缩进,首先想到的是 重写UITableView的代理方法 : override func tableView(_ tableView: UITableView, indentationLevelForRowAt indexPath: IndexPath) -> Int { return pdfOutlineData.GetDepth(Node: pdfOutlineList[indexPath.row]) } 发现对于tableview并没有实现缩进,经过查阅资料,发现,该方法只针对默认的UITableViewCell有效,自定义UITableViewCell是无效的,因为系统并不知道需要缩进哪些Cell,解决方法是在自定义UITableViewCell类中重写 layoutSubviews方法: override func layoutSubviews() { super.layoutSubviews() var contentFrame = contentView.frame let offset = CGFloat(CGFloat(self.indentationLevel)