swift中如何正確設定UITableViewCell的UITableViewCellStyle樣式屬性!
阿新 • • 發佈:2019-02-09
看看我的錯誤三步走:
第1步 使用如下方法在ViewController中的viewDidLoad方法中用:
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cellID") 方法去註冊需要複用的Cell的ID
第2步 貼一下關鍵程式碼
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ var cell: UITableViewCell? = nil cell = tableView.dequeueReusableCell(withIdentifier: "cellID", for: indexPath) if cell == nil{ cell = UITableViewCell.init(style: UITableViewCellStyle.subtitle, reuseIdentifier: "cellID") } cell?.textLabel?.text = "123123" cell?.imageView?.image = UIImage.init(named: "ico_del.png") cell?.detailTextLabel?.text = "987654" cell?.detailTextLabel?.backgroundColor = UIColor.brown cell?.textLabel?.textColor = UIColor.black return cell! }
第3步:看看執行結果
問題出現了,明明設定了UITableViewCellStyle.subtitle樣式
cell = UITableViewCell.init(style: UITableViewCellStyle.subtitle, reuseIdentifier: "cellID")
可是結果事與願違,顯示的是UITableViewCellStyle.default樣式!!!納尼?????
除錯後發現了問題所在:
if cell == nil{//想一想為什麼這裡不會被執行,cell的樣式才會設定無效的 cell = UITableViewCell.init(style: UITableViewCellStyle.subtitle, reuseIdentifier: "cellID") }
這段程式碼壓根都沒有機會去執行!!!原因是在上述第一步中已經註冊過了需要複用Cell的ID,然後執行
cell = tableView.dequeueReusableCell(withIdentifier: "cellID", for: indexPath)
cell結果自然不會為nil,想象中如此,哈哈!別高興太早
(---------------------不割一下心裡不爽----------------------------)
那動手嘗試一下看是不是想象中的結果:
果斷刪掉ViewController中的viewDidLoad中的註冊方法
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cellID")//刪掉刪掉
不去註冊了,那麼當執行程式碼
cell = tableView.dequeueReusableCell(withIdentifier: "cellID", for: indexPath)
cell的結果應該為nil了吧,可是執行結果卻直接拋異常了!!!
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier cellID - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'
好傢伙,why????oh,myGod,以前不是這樣對我的啊
折騰了好久,才發現用錯了方法,麻蛋!!!
正確方法:
cell = tableView.dequeueReusableCell(withIdentifier: "cellID") //切記!!!
錯誤的方法:
cell = tableView.dequeueReusableCell(withIdentifier: "cellID", for: indexPath)//方法本無對錯,只是用錯了地方,嗚嗚嗚
終於自己盼望的結果出來了,上個圖,慰藉一下上天之靈
全劇終!!!