1. 程式人生 > >swift中如何正確設定UITableViewCell的UITableViewCellStyle樣式屬性!

swift中如何正確設定UITableViewCell的UITableViewCellStyle樣式屬性!

看看我的錯誤三步走:

第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)//方法本無對錯,只是用錯了地方,嗚嗚嗚

終於自己盼望的結果出來了,上個圖,慰藉一下上天之靈


全劇終!!!