1. ClassNameFromString 的方法oc 可以正常使用,但是swift 不能直接使用的,下面的代码

func getAPPName() -> String?{

    let nameKey = "CFBundleName" //或用  "CFBundleExecutable"
guard let appName = Bundle.main.object(forInfoDictionaryKey: nameKey) as? String else {
return nil;
}
return appName
} func getClassNameFromeString(_ classString :String)->AnyClass?{ guard let nameSpage = getAPPName() else {
print("没有命名空间")
return nil;
}
guard let childClass = NSClassFromString(nameSpage + "." + classString) else {
print("没有获取到对应的class")
return nil;
}
guard let childType = childClass as? UITableViewCell.Type else {
print("没有得到的类型")
return nil;
}
return childType.self;
}

2.利用这个方法,实现  tableview 简单的助理类

class TableViewHelper : NSObject ,UITableViewDataSource,UITableViewDelegate {

    var rowHeight:CGFloat?

    var cellForRow :((_ :UITableView,IndexPath)->UITableViewCell)?
var heightForRow :((_ :IndexPath)->CGFloat)?
var cellWillDisplay :((_ :UITableViewCell,IndexPath)->Void)? var selectRow :((_ :IndexPath)->Void)?; func addTableHeplerWith(tableView:UITableView,cellIdentArray:[(cellClass:String,cellIdent:String,isNib:Bool)]) ->Void{ self.t_tableView = tableView;
self.t_cellIdentArray = cellIdentArray;
self.initSettings();
} func reloaTableView(modelArray:[Any]) -> Void { t_models = modelArray;
t_tableView?.reloadData();
} //**************** 私有 方法变量 分割线 ****************// private lazy var t_models :[Any] = { return [Any]();
}() private lazy var t_cellIdentArray : [(cellClass:String,cellIdent:String,isNib:Bool)] = { return [(cellClass:String,cellIdent:String,isNib:Bool)]();
}(); private var t_tableView : UITableView? private func initSettings()->Void{ t_tableView?.delegate = self;
t_tableView?.dataSource = self; for tuple in t_cellIdentArray{ if tuple.isNib == false { let cellClassName = getClassNameFromeString(tuple.cellClass) as! UITableViewCell.Type;
t_tableView?.register(cellClassName, forCellReuseIdentifier: tuple.cellIdent); }else{ t_tableView?.register(UINib.init(nibName: tuple.cellClass, bundle: nil), forCellReuseIdentifier: tuple.cellIdent);
}
}
} // tableView dataSource method func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ return t_models.count
} func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ if cellForRow != nil { return cellForRow!(tableView,indexPath);
}else{ print("tableView 调用不到对应的 cell");
return UITableViewCell();
}
} //tableView delegate method func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat{ if heightForRow != nil { return heightForRow!(indexPath);
}
if rowHeight != nil { return rowHeight!
}
return ;
} func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath){ if cellWillDisplay != nil { return cellWillDisplay!(cell,indexPath);
}
} func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ tableView.deselectRow(at: indexPath, animated: true); if selectRow != nil {
selectRow!(indexPath);
}
} }

使用这个助理

let tableView = UITableView();
let helper = TableViewHelper(); func prepareHelperAction() -> Void { var cellIdents:[(String,String,Bool)];
if is_iPad() { cellIdents = [("CompletedPadCell",completedCellID,false)];
}else{ cellIdents = [("CompletedCell",completedCellID,false)];
} helper.addTableHeplerWith(tableView: tableView, cellIdentArray: cellIdents); helper.heightForRow = { (indexPath) in if is_iPad() {
return
}else{
return
}
} helper.cellForRow = { (table,indexPath) in if is_iPad() { let cell = table.dequeueReusableCell(withIdentifier: self.completedCellID) as! CompletedPadCell;
cell.configCellWithModel(self.models[indexPath.row] );
cell.delegate = self;
cell.indexPath = indexPath;
return cell; }else{ let cell = table.dequeueReusableCell(withIdentifier: self.completedCellID) as! CompletedCell;
cell.configCellWithModel(self.models[indexPath.row] );
cell.delegate = self;
cell.indexPath = indexPath;
return cell;
}
}
} func reloadUI(_ dataModels:[CPModel]) -> Void { if dataModels.count == { let footerView = UIView.init(frame: CGRect(x:,y:,width:self.view.frame.size.width ,height:self.view.frame.size.height * 0.5));
let footerLabel = UILabel.init(frame: CGRect(x:,y:,width:,height:));
footerLabel.text = "未查找到对应的报告";
footerLabel.font = UIFont.boldSystemFont(ofSize: );
footerLabel.textAlignment = .center;
footerLabel.textColor = UIColor.gray;
footerView.addSubview(footerLabel);
footerLabel.center = footerView.center ; tableView.tableFooterView = footerView }else{ self.models = dataModels;
tableView.tableFooterView = UIView.init(frame: CGRect.zero);
} helper.reloaTableView(modelArray: models);
}

cell he cell 的基类

class BaseCell: UITableViewCell {

    override func awakeFromNib() {
super.awakeFromNib()
} override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated) } func configCellWithModel(_ model:Any)->Void{
return;
}
}
class CompletedPadCell: BaseCell { var delegate :CompletedCellDelegate?
var indexPath :IndexPath? override func awakeFromNib() {
super.awakeFromNib()
} override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
required init?(coder aDecoder:NSCoder) {
super.init(coder: aDecoder)
} override init(style:UITableViewCellStyle, reuseIdentifier:String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setUpUI();
}
private func setUpUI() { }override func configCellWithModel(_ model:Any)->Void{ let cellModel = model as? CPModel; self.acsLabel.text = Int((cellModel?.pri!)!) == ? "ACS":"";
self.nameLabel.text = cellModel?.pat_name
self.sexLabel.text = cellModel?.pat_gender
self.ageLabel.text = cellModel?.pat_age
self.codeLabe.text = cellModel?.sid
self.timeLabel.text = cellModel?.date; }

swift ClassNameFromString 的替换方法 + 创建TableviewHelper的更多相关文章

  1. java 集合Collections 工具类:排序,查找替换。Set、List、Map 的of方法创建不可变集合

    Collections 工具类 Java 提供1个操作 Set List Map 等集合的工具类 Collections ,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了将集合 ...

  2. 【Swift学习】Swift编程之旅---方法(十五)

    在Swift中结构体和枚举也能够定义方法,而在 Objective-C 中,类是唯一能定义方法的类型. 实例方法 实例方法是属于某个特定类.结构体或者枚举类型实例的方法,实例方法提供访问和修改实例属性 ...

  3. iOS开发之swift与OC混编出现的坑,oc中不能对swift的代理进行调用,不能访问swift中的代理,swift中的回调方法

    1. Swift与oc混编译具体怎么实现,这儿我就不重复讲出了,网上有大把的人讲解. 2. 在swift与OC混编的编译环境下, oc类不能访问swift创建类中的代理? 解决方法如下: 在代理的头部 ...

  4. android studio学习----Android Studio导入github下载的工程--替换方法

    http://www.cnblogs.com/liuling/p/2015-9-16-01.html 这种方法是可行的,主要是先自己创建一个project ,然后把没有的文件夹都复制过去就OK了,特别 ...

  5. 测试Javacript里的checkbox是否被选中的status和checked的替换方法

    测试Javacript里的checkbox是否被选中的status和checked的替换方法,checkbox.checked和checkbox.status的功能一样,注意checkbox.stat ...

  6. [Java] - 格式字符串替换方法

    Java 字符串格式替换方法有两种,一种是使用String.format(...),另一种是使用MessageFormat.format(...) 如下: import java.text.Messa ...

  7. Swift编程语言中的方法引用

    由于Apple官方的<The Swift Programming Guide>对Swift编程语言中的方法引用介绍得不多,所以这里将更深入.详细地介绍Swift中的方法引用. Swift与 ...

  8. PHP mkdir 方法 创建 0777 权限的目录问题

    php 中使用 mkdir() 方法创建 0777 权限的目录: $path = './Logs/secondCheck/';if(!is_dir($path)){ mkdir($path, 0777 ...

  9. console.log的一个应用 -----用new方法生成一个img对象和document.createElement方法创建一个img对象的区别

    我用两种方法来生成img对象,第一种方法是用new方法,第二种方法是用document.createElement方法. var img1 = new Image(); var img2 = docu ...

随机推荐

  1. javaScript基础及初始面向对象

    对象是什么?对象是包含相关属性和方法的集合体属性方法什么是面向对象面向对象仅仅是一个概念或者编程思想通过一种叫做原型的方式来实现面向对象编程 创建对象自定义对象内置对象 自定义对象2-1基于Objec ...

  2. HTML 007 链接

    HTML 链接 HTML 使用超级链接与网络上的另一个文档相连.几乎可以在所有的网页中找到链接.点击链接可以从一张页面跳转到另一张页面. 尝试一下 - 实例 HTML 链接如何在HTML文档中创建链接 ...

  3. Linux core dump 诊断进程奔溃退出

           最近项目中出现了一个问题,服务器端程序会突然崩溃退出,我们采取了coredump技术以找到崩溃原因,即确定进程退出时正在执行的函数是哪个,其状态如何.       如果系统开启了core ...

  4. jQuery相关方法1

    一.设置某个元素的标签内容------.html()方法 <script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js& ...

  5. Ubuntu 18.04安装NVIDIA显卡驱动教程

            最近遇到了在Ubuntu 18.04上安装NVIDIA显卡驱动的情况,看到一篇教程讲解的很好,拿来收藏. 安装NVIDIA显卡驱动风险极大,新手注意. 在Ubuntu 18.04上安装 ...

  6. [other] Div

    https://www.luogu.org/problemnew/show/U16765 解法一 随机输出一组合法解. 复杂度 O(1) 预计得分 10~??? 解法二 看完题目基本能想到大力贪心,通 ...

  7. [转]引用模板类中定义的类型(用typedef或using)以及auto、decltype、typename的使用

    一.背景 使用typedef或者using定义类型别名是非常常见的手段,在c++里面,有时为了封装性,模块性等原因还会在某一个namespace或者class内部定义类型别名. 最近在写c++代码的时 ...

  8. 在默认使用apache中央仓库时, 报错 protocol_version

    https://cloud.tencent.com/developer/ask/136221/answer/241408 2018年6月,为了提高安全性和符合现代标准,不安全的TLS 1.0和1.1协 ...

  9. DES 加密 转码 脱敏

    from pyDes import des, CBC, PAD_PKCS5 import binascii # 秘钥 KEY = 'mHAxsLYz' from pyDes import des, C ...

  10. Python3条件判断

    if语句: Python中if语句的一般形式如下: if condition_1: statement_block_1 elif condition_2: statement_block_2 else ...