irpas技术客

iOS swift底部弹窗列表展示_疯狂小华哥_swift 底部弹窗

网络 7574

调用方式: ? ? ??

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底部弹窗列表展示