Swift解决UITableView空数据视图问题的简单⽅法
前⾔
UITableView在现如今的APP中已经成为必不可少的⼀个控件,所以今天给⼤家带来UITableView在Swift中是如何实现的,下⾯这篇⽂章主要给⼤家介绍了关于Swift解决UITableView空数据视图的相关内容,下⾯话不多说了,来⼀起看看详细的介绍吧tableView空数据问题
⼀般项⽬中tableView若数据为空时会有⼀个提⽰⽰意图
为了更好的管理这种提⽰⽰意图,笔者利⽤extension进⾏了简单的拓展
解决思路
利⽤swift⾯向协议的特点,使⽤协议来进⾏设置。
设计空视图协议
tableView设置空视图代理
每次重绘tableView时判断添加或移除空数据提⽰图
具体实现
空视图协议,遵守协议必须实现showEmtpy属性
private let EmptyViewTag = 12345;
protocol EmptyViewProtocol: NSObjectProtocol {
///⽤以判断是会否显⽰空视图
var showEmtpy: Bool {get}
///配置空数据提⽰图⽤于展⽰
func configEmptyView() -> UIView?
}
extension EmptyViewProtocol {
func configEmptyView() -> UIView? {
return nil
}
}
tableView扩展配置,实现空数据⽰意图展⽰判断
<和hangeMethod是只执⾏⼀次⽅法交换操作,具体实现可看源码
func setEmtpyViewDelegate(target: EmptyViewProtocol) {
<(#function) {
}
}
@objc func re_layoutSubviews() {
<_layoutSubviews()
ptyDelegate!.showEmtpy {
guard let view = ptyDelegate?.configEmptyView() else {
return;
}
view.tag = EmptyViewTag;
self.addSubview(view)
} else {
guard let view = self.viewWithTag(EmptyViewTag) else {
return;
}
view .removeFromSuperview()
}
}
//MARK:- ***** Associated Object *****
private struct AssociatedKeys {
static var emptyViewDelegate = "tableView_emptyViewDelegate"
}
private var emptyDelegate: EmptyViewProtocol? {
get {
return (objc_getAssociatedObject(self, &ptyViewDelegate) as! EmptyViewProtocol)
}
set (newValue){
objc_setAssociatedObject(self, &ptyViewDelegate, newValue!, .OBJC_ASSOCIATION_RETAIN)
}
}
⽰例代码
//关键部分代码
class ViewController: UIViewController , EmptyViewProtocol {
private var datas: Array<Dictionary<String, String>>?
/// 空数据提⽰图
private var label: UILabel?
var showEmtpy: Bool {
get {
if let data = self.datas {
unt == 0
}
return true
}
}
override func viewDidLoad() {
super.viewDidLoad()
view ui框架let tableView: UITableView = ...
tableView.setEmtpyViewDelegate(target: self)
self.view.addSubview(tableView)
}
func configEmptyView() -> UIView? {
if let view = self.label {
return view
}
let lab = UILabel(frame: CGRect(x: 100, y: 300, width: 200, height: 30))
< = "this is a test"
self.label = lab
return lab
}
}
效果图如下
最后
该设计较为简单⽅便管理,若有不妥之处望指出
相关代码请前往swiftCustomControl(本地下载)查看
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论