目的:
当用户点击自定义按钮时,应该会出现一个空白的UIView,覆盖按钮。
我已将我的代码添加到一个新的Swift项目中,看起来像这样
import UIKit
class DownloadUIButton: UIButton {
var isDownloading: Bool? = false
func addView() {
let view = UIView(frame: self.frame)
view.backgroundColor = UIColor.white
self.addSubview(view)
}
}
class ViewController : UIViewController, UITableViewDelegate, UITableViewDataSource {
fileprivate let tableView: UITableView = UITableView(frame: CGRect.init(x: 0, y: 0, width: 300, height: 300), style: UITableViewStyle.plain)
override func viewDidLoad() {
self.setupTableView()
}
fileprivate func setupTableView() {
self.tableView.dataSource = self
self.tableView.delegate = self
tableView.backgroundColor = UIColor.white
tableView.isOpaque = true
view.addSubview(self.tableView)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .default, reuseIdentifier: "CellIdentifier")
let buttonSize = 30
let btn = DownloadUIButton(frame: CGRect(x: 10, y: 10, width: buttonSize, height: buttonSize))
btn.backgroundColor = UIColor.red
btn.addTarget(self, action:#selector(handleDownload(_:)), for: .touchUpInside)
cell.addSubview(btn)
return cell
}
@objc func handleDownload(_ btn: DownloadUIButton) {
btn.addView()
}
}
但是,该项目会出现此错误:
2017-10-28 12:55:41.558522 + 0100 TestProject [21392:1779236] ***由于未捕获的异常'CALayerInvalid'终止应用程序,原因:'图层是其图层树中循环的一部分'
答案 0 :(得分:1)
要使视图显示在按钮前面,我只需使用相同的框架制作兄弟视图。在发布时将自定义视图的isHidden
设置为true
,单击该按钮时,将按钮的isHidden
设置为true
,将自定义视图的isHidden
设置为false
。或者,如果您确实希望按钮在自定义视图的透明部分后面可见,则可以使用sendSubview(toBack:)
使按钮显示在自定义视图的后面。