调用方式: ? ? ??
let acVC = QMActionSheetViewController(cellTitleList: ["保存", "收藏", "分享", "点赞"])!
?? ? ? ? ? acVC.valueBlock = { index in
?? ? ? ? ? ? ? print(index)
?? ? ? ? ? }
?? ? ? ? ? acVC.cellTitleColor = UIColor.blue
?? ? ? ? ? acVC.cellTitleFont = 17
?? ? ? ? ? acVC.titleString = "当你弹出来时,我love你"
? ? ? ? ? ?
?? ? ? ? ? present(acVC, animated: false, completion:? nil)
? ? }
新建一个?QMActionSheetViewController控制器
import UIKit
public let kScreenWidth: CGFloat = UIScreen.main.bounds.size.width
public let kScreenHeight: CGFloat = UIScreen.main.bounds.size.height
class QMActionSheetViewController: UIViewController {
?? ?
? ? // ----------------外界调用的属性值--------------
? ? var valueBlock: valueBlock?
? ? /// cell内容
? ? var cellTitleList = [String]()
? ? /// cell字体颜色
? ? var cellTitleColor = UIColor.green
? ? /// cell字体大小
? ? var cellTitleFont: CGFloat = 17
? ? /// 标题
? ? var titleString: String? = "我是一个标题"
? ? /// 标题字体大小
? ? var titleFont: CGFloat = 15
?? ?
?? ?
? ? // ---------------内部属性-------------------
? ? typealias valueBlock = (NSInteger)->Swift.Void
? ? fileprivate var tableView = UITableView()
? ? fileprivate var overVeiw = UIView()
? ? fileprivate let cellID = "cellID"
? ? fileprivate var tableViewHight: CGFloat {
//? ? ? ? return CGFloat(cellTitleList.count) * rowHight + headerViewHight + footerViewHight
? ? ? ? return kScreenHeight*0.9
? ? }
? ? fileprivate let rowHight: CGFloat = 50
? ? fileprivate let headerViewHight: CGFloat = 50
? ? fileprivate var footerViewLineHight: CGFloat = 5
? ? fileprivate var footerViewHight: CGFloat {
? ? ? ? return headerViewHight + footerViewLineHight
? ? }
?? ?
? ? required init?(cellTitleList: [String]!) {
? ? ? ? super.init(nibName: nil, bundle: nil)
? ? ? ? // 初始化
? ? ? ? self.cellTitleList = cellTitleList;
?? ? ? ?
? ? ? ? view.backgroundColor = UIColor.clear
? ? ? ? self.providesPresentationContextTransitionStyle = true
? ? ? ? self.definesPresentationContext = true
? ? ? ? self.modalPresentationStyle = .custom
?? ? ? ?
? ? ? ? // 初始化UI
? ? ? ? setupUIViews()
? ? }
?? ?
? ? required init?(coder aDecoder: NSCoder) {
? ? ? ? fatalError("init(coder:) has not been implemented")
? ? }
?? ?
? ? override func viewWillAppear(_ animated: Bool) {
? ? ? ? super.viewWillAppear(animated)
?? ? ? ?
? ? ? ? UIView.animate(withDuration: 0.25) {
? ? ? ? ? ? var frame = self.tableView.frame
? ? ? ? ? ? frame.origin.y = kScreenHeight-self.tableViewHight
? ? ? ? ? ? self.tableView.frame = frame
? ? ? ? ? ? self.overVeiw.alpha = 0.3
//? ? ? ? ? ? self.overVeiw.alpha = 0.3
? ? ? ? }
?? ? ? ?
? ? }
?? ?
? ? override func viewDidLoad() {
? ? ? ? super.viewDidLoad()
?? ? ? ?
? ? }
}
// MARK: 初始化UI
extension QMActionSheetViewController {
? ? func setupUIViews() {
? ? ? ? overVeiw =
? ? ? ? ? ? UIView(frame: CGRect(x: 0, y: 0, width:kScreenWidth, height: kScreenHeight))
? ? ? ? overVeiw.backgroundColor = UIColor.black
? ? ? ? overVeiw.alpha = 0.0
? ? ? ? view.addSubview(overVeiw)
? ? ? ? tableView = UITableView(frame: CGRect(x: 0, y: kScreenHeight, width: kScreenWidth, height: tableViewHight), style: .plain)
? ? ? ? self.view.addSubview(tableView)
? ? ? ? tableView.delegate = self
? ? ? ? tableView.dataSource = self
? ? ? ? tableView.showsVerticalScrollIndicator = false
? ? ? ? tableView.showsHorizontalScrollIndicator = false
? ? ? ? tableView.backgroundColor = .white
? ? ? ? tableView.isScrollEnabled = false
? ? ? ? tableView.bounces = false
? ? ? ? tableView.isPagingEnabled = false
? ? ? ? tableView.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
? ? ? ? tableView.register(QMTitleCell.classForCoder(), forCellReuseIdentifier: cellID)
?? ? ? ?
? ? ? ? let maskPath = UIBezierPath(roundedRect: tableView.bounds, byRoundingCorners: [.topLeft , .topRight], cornerRadii: CGSize(width: 10, height: 10))
?? ? ? ? let maskLayer = CAShapeLayer()
? ? ? ? maskLayer.frame = tableView.bounds
?? ? ? ? maskLayer.path = maskPath.cgPath
? ? ? ? tableView.layer.mask = maskLayer
?? ? ? ?
?? ? ? ?
?? ? ? ?
? ? }
?? ?
? ?
}
// MARK: 点击屏幕弹出退出
extension QMActionSheetViewController {
?? ?
? ? func sheetViewDismiss() {
? ? ? ? UIView.animate(withDuration: 0.25, animations: {
? ? ? ? ? ? var frame = self.tableView.frame
? ? ? ? ? ? frame.origin.y = kScreenHeight
? ? ? ? ? ? self.tableView.frame = frame
? ? ? ? ? ? self.overVeiw.alpha = 0
?? ? ? ? ? ?
? ? ? ? }) { (_) in
? ? ? ? ? ? self.dismiss(animated: false, completion: nil)
? ? ? ? }
? ? }
?? ?
//? ? override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
//? ? ? ? sheetViewDismiss()
//? ? }
?? ?
? ? @objc func cancelBtnDidClick(btn: UIButton) {
? ? ? ? sheetViewDismiss()
? ? }
}
// MARK: UITableViewDelegate, UITableViewDataSource
extension QMActionSheetViewController: UITableViewDelegate, UITableViewDataSource {
? ? func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
? ? ? ? return cellTitleList.count
? ? }
?? ?
? ? func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
?? ? ? ?
? ? ? ? let cell = tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPath) as! QMTitleCell
? ? ? ? cell.titleLabel.text = cellTitleList[indexPath.row]
? ? ? ? cell.titleLabel.textColor = UIColor.black
? ? ? ? cell.titleLabel.font = UIFont.systemFont(ofSize: cellTitleFont)
? ? ? ? return cell
? ? }
?? ?
? ? func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
? ? ? ? return CGFloat(rowHight)
? ? }
?? ?
? ? func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
? ? ? ? tableView.deselectRow(at: indexPath, animated: true)
?? ? ? ?
? ? ? ? if (self.valueBlock != nil) {
? ? ? ? ? ? self.valueBlock!(indexPath.row)
? ? ? ? }
? ? }
?? ?
? ? func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
? ? ? ? return headerViewHight
? ? }
?? ?
? ? func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
? ? ? ? return headerViewHight
? ? }
?? ?
? ? func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
?? ? ? ?
? ? ? ? let view = UIView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: headerViewHight))
? ? ? ? view.backgroundColor = .white
?? ? ? ?
?? ? ? ?
?? ? ? ?
? ? ? ? let btn = UIButton(type: .custom)
? ? ? ? btn.frame = CGRect(x: kScreenWidth - 60, y: 5, width: 40, height: 20)
? ? ? ? view.addSubview(btn)
? ? ? ? btn.setTitle("确定", for: .normal)
? ? ? ? btn.titleLabel?.font = UIFont.systemFont(ofSize: titleFont)
? ? ? ? btn.setTitleColor(UIColor.black, for: .normal)
? ? ? ? btn.addTarget(self, action: #selector(cancelBtnDidClick(btn:)), for: .touchUpInside)
?? ? ? ?
?? ? ? ?
? ? ? ? // 标题
//? ? ? ? let titleLabel = UILabel(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: headerViewHight))
//? ? ? ? titleLabel.text = titleString
//? ? ? ? titleLabel.font = UIFont.systemFont(ofSize: titleFont)
//? ? ? ? titleLabel.textColor = UIColor.lightGray
//? ? ? ? titleLabel.textAlignment = .center
//? ? ? ? view.addSubview(titleLabel)
? ? ? ? // 线
//? ? ? ? let lineView = UIView(frame: CGRect(x: 0, y: view.frame.size.height-1, width: kScreenWidth, height: 1))
//? ? ? ? lineView.backgroundColor = UIColor(red: 220/250.0, green: 220/250.0, blue: 220/250.0, alpha: 1.0)
//? ? ? ? view.addSubview(lineView)
? ? ? ? return view
?? ? ? ?
? ? }
?? ?
? ? func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
? ? ? ? let footerView = UIView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: footerViewHight))
? ? ? ? footerView.backgroundColor = .white
//? ? ? ? let lineView = UIView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: footerViewLineHight))
//? ? ? ? lineView.backgroundColor = UIColor.lightGray
//? ? ? ? footerView.addSubview(lineView)
?? ? ? ?
//? ? ? ? let btn = UIButton(type: .custom)
//? ? ? ? btn.frame = CGRect(x: 0, y: footerViewLineHight, width: kScreenWidth, height: footerViewHight-footerViewLineHight)
//? ? ? ? footerView.addSubview(btn)
//? ? ? ? btn.setTitle("取消", for: .normal)
//? ? ? ? btn.titleLabel?.font = UIFont.systemFont(ofSize: titleFont)
//? ? ? ? btn.setTitleColor(UIColor.black, for: .normal)
//? ? ? ? btn.addTarget(self, action: #selector(cancelBtnDidClick(btn:)), for: .touchUpInside)
?? ? ? ?
? ? ? ? return footerView;
? ? }
}
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。 |
标签: #Swift #底部弹窗 #iOS #swift底部弹窗列表展示