【纯代码】Swift - 自定义底部弹窗基类(可根据需要自行扩展内容)
//弹窗视图
class PopView : UIView {
var selectButtonCallBack:((_ title:String)-> Void)? var contenView:UIView?
{
didSet{
setUpContent()
}
} override init(frame: CGRect) {
super.init(frame: frame)
} required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
} func setUpContent(){ if self.contenView != nil {
self.contenView?.frame.origin.y = UIScreen.main.bounds.size.height -
self.addSubview(self.contenView!)
}
self.backgroundColor = newColorWithAlpha(, , , 0.4)
self.isUserInteractionEnabled = true
self.addGestureRecognizer(UITapGestureRecognizer.init(target: self, action: #selector(dismissView)))
//以下为添加内容,可根据需要删除以下部分
sudokuConstraints()
} @objc func dismissView(){
UIView.animate(withDuration: 0.3, animations: {
self.alpha =
}) { (true) in
self.removeFromSuperview()
self.contenView?.removeFromSuperview()
}
} func showInWindow(){
UIApplication.shared.keyWindow?.addSubview(self)
UIView.animate(withDuration: 0.3, animations: {
self.alpha = 1.0
self.contenView?.frame.origin.y = UIScreen.main.bounds.size.height -
}, completion: nil)
} //MARK: - 布局
func sudokuConstraints() -> Void {
let titleArr = ["京","沪","浙","苏","粤","鲁","晋","翼",
"豫","川","渝","辽","吉","黑","皖","鄂",
"湘","赣","闽","陕","甘","宁","蒙","津",
"贵","云","桂","琼","青","新","藏"] for (index,value) in titleArr.enumerated() {
let button = createButton(title: value)
let margin = (UIScreen.main.bounds.size.width - * )/( + )
let col = CGFloat(index % Int())
let row = CGFloat(index / Int())
let viewX = margin + col * ( + margin)
let viewY = + row * ( + ) button.frame = CGRect(x: viewX, y: viewY, width: , height: )
self.contenView!.addSubview(button)
}
} func createButton(title:String) -> UIButton {
let button = UIButton()
button.setTitle(title, for: .normal)
button.setTitleColor(newColor(, , ), for: .normal)
button.backgroundColor = .white
button.layer.masksToBounds = true
button.layer.cornerRadius = 5.0 button.addTarget(self, action: #selector(buttonClickAction(button:)), for: .touchUpInside)
return button
} @objc func buttonClickAction(button:UIButton) -> Void {
if self.selectButtonCallBack != nil {
self.selectButtonCallBack!(button.titleLabel?.text ?? "粤")
}
}
}
使用:
let popview = PopView.init(frame:UIScreen.main.bounds)
popview.contenView = UIView.init(frame: CGRect.init(x: , y: UIScreen.main.bounds.size.height - , width: UIScreen.main.bounds.size.width, height: ))
popview.contenView?.backgroundColor = newColor(, , )
popview.selectButtonCallBack = {
(title:String) -> Void in
self.righAbbreviationButton.setTitle(title, for: .normal)
popview.dismissView()
}
popview.showInWindow()
效果图:

【纯代码】Swift - 自定义底部弹窗基类(可根据需要自行扩展内容)的更多相关文章
- 编写高质量代码改善C#程序的157个建议——建议23:避免将List<T>作为自定义集合类的基类
建议23:避免将List<T>作为自定义集合类的基类 如果要实现一个自定义的集合类,不应该以一个FCL集合类为基类,反而应扩展相应的泛型接口.FCL结合类应该以组合的形式包含至自定义的集合 ...
- 【转】C++ 虚函数&纯虚函数&抽象类&接口&虚基类
1. 动态多态 在面向对象语言中,接口的多种不同实现方式即为多态.多态是指,用父类的指针指向子类的实例(对象),然后通过父类的指针调用实际子类的成员函数. 多态性就是允许将子类类型的指针赋值给父类类型 ...
- C++ 虚函数&纯虚函数&抽象类&接口&虚基类(转)
http://www.cnblogs.com/fly1988happy/archive/2012/09/25/2701237.html 1. 多态 在面向对象语言中,接口的多种不同实现方式即为多态.多 ...
- 关于TagHelper的那些事情——如何自定义TagHelper(TagHelper基类)
写在开头 前面介绍了TagHelper的基本概念和内嵌的TagHelpers,想必大家对TagHelper都有一定的了解.TagHelper看上去有点像WebControl,但它不同于WebContr ...
- qt 5 小练习 纯代码制作自定义按钮
大家都知道QT设计师中直接拖动的按钮是长方形带有圆角的图案,那我们如何来设置自定义按钮呢 要设计一个按钮,我们必须要知道按钮有什么属性,首先,按钮必须有一个位置 第二,按钮必须有一个名称.还有当我们点 ...
- 25.自定义mixin和基类
很多时候业务需求并不是几个简单的mixin就可以满足,需要我们自定义mixin # get_object源码中字段查询源代码 filter_kwargs = {self.lookup_field: s ...
- C++ - 虚基类、虚函数与纯虚函数
虚基类 在说明其作用前先看一段代码 class A{public: int iValue;}; class B:public A{public: void bPrintf(){ ...
- ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布 ...
- 编写高质量代码改善C#程序的157个建议[勿选List<T>做基类、迭代器是只读的、慎用集合可写属性]
前言 本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html .本文主要学习记录以下内容: 建议23.避免将List<T>作为自定义集合类的基 ...
随机推荐
- CSS 垂直外边距合并:规范、延伸、原理、解决办法
<CSS 权威指南>第七章基本视觉格式化.p192,提到了 垂直外边距合并 的情况,解释总体算清晰,但是感觉不全且没有归纳成一条一条的,参考 CSS框模型中外边距(margin)折叠图文详 ...
- [ Office 365 开发系列 ] 前言
前言 本人从接触Microsoft SharePoint Server 2007到目前为止,已经在微软SharePoint的路上已经走了好几年,基于SharePoint平台的特殊性,对微软产品线都有了 ...
- 《Django By Example》第十二章(终章) 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第十二章,全书最后一章,终于到这章 ...
- AJAX Form Submit Framework 原生js post json
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest <!doctype ht ...
- intelij IDEA在启动tomcat时控制台日志乱码
1.在idea安装目录的bin下修改idea.exe.vmoptions和idea64.exe.vmoptions,添加 -Dfile.encoding=UTF-8 -Dconsole.encodin ...
- TuShare获取K线数据
Tushare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从数据采集.清洗加工 到 数据存储的过程,能够为金融分析人员提供快速.整洁.和多样的便于分析的数据,为他们在数据获取 ...
- Json与字符串互相转换
jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 浏览器 ...
- 内核通信之Netlink源码分析-用户内核通信原理2
2017-07-05 上文以一个简单的案例描述了通过Netlink进行用户.内核通信的流程,本节针对流程中的各个要点进行深入分析 sock的创建 sock管理结构 sendmsg源码分析 sock的 ...
- Loki之ThreadPool
Loki中的ThreadPool目的主要是对创建出来的线程进行复用. ThreadPool在Test而非Loki目录下,因此并非是标准Loki的组件之一,不过我们可以对其修改定制, 下面是对其源码的大 ...
- Git Extension工具安装及使用
以下界面所示的三个工具,如果没安装过,则勾上让其安装.MsysGit为Git的Windows版本,必须要安装:Kdiff为对比/合并工具,可选安装,可以换为使用其它的相关工具:最后一个Windows ...