V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jamfer
V2EX  ›  问与答

Swift 关于 UITableViewCell 参数传递的问题

  •  
  •   jamfer · 2017-07-17 12:52:25 +08:00 · 2152 次点击
    这是一个创建于 2679 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为了自定义 cell 同时可以复用 cell,建立了一个 UITableViewCell,如下所示

    import UIKit
    
    class newcell: UITableViewCell {
    
        var tit = UILabel()
        var str = ""
    
    }
    

    当给这个 cell 传递参数的时候 cell?.tit.text = title 显示没问题,但 cell?.str = content 就没用(打印 src 依然为空,content 确定是有内容的),请问这里的字串符要怎么传给 cell 啊?

    10 条回复    2017-07-20 14:34:03 +08:00
    jamfer
        1
    jamfer  
    OP
       2017-07-17 13:05:38 +08:00
    自顶一下
    paradoxs
        2
    paradoxs  
       2017-07-17 13:09:56 +08:00
    当你
    cell?.str = content
    的时候, 你确定这个 cell 是
    var tit = UILabel()
    创造出来的吗?

    po 这个 cell,看一下内存
    jamfer
        3
    jamfer  
    OP
       2017-07-17 13:17:11 +08:00
    @paradoxs

    var tit = UILabel() 只是这个 cell 里的一个元素,下面代码还有很多我没贴。创建 cell 的代码如下:

    var cell = tableView.dequeueReusableCell(withIdentifier:"cell") as? newscell
    if cell == nil{
    cell = newcell(style:.default, reuseIdentifier:"cell")
    cell?.selectionStyle = .none
    }

    cell?.tit.text = title
    cell?.imgstr = content

    return cell!
    paradoxs
        4
    paradoxs  
       2017-07-17 13:22:37 +08:00
    @jamfer 能打个包出来吗 我看看
    kingcos
        5
    kingcos  
       2017-07-17 14:36:56 +08:00
    1. 你是在哪里打印的?
    2. 你的代码里一会儿是 as? newscell,一会儿是 newcell,你是不是创建了不同的自定义 Cell 然后搞混了?
    3. 代码最好规范一些,否则看起来很凌乱,当然只是建议。
    loveuqian
        6
    loveuqian  
       2017-07-17 14:51:25 +08:00
    使用 dequeueReusableCellWithIdentifier 复用 cell 的时候
    为什么还要判断 nil,我一直没看懂好多代码都要判断 nil 干嘛
    只要你注册了肯定是有的啊,哪种情况会出 nil ?
    zhNaMore
        7
    zhNaMore  
       2017-07-17 14:59:02 +08:00   ❤️ 1
    这个 imgStr 是图片地址吧。你这个图片地址的 set 方法先于 cell 的构造方法实现就会出现图片为空的。
    你把 cell 的图片赋值 image = imageStr 放到 didset 或者 set 方法试试
    jamfer
        8
    jamfer  
    OP
       2017-07-17 16:35:41 +08:00
    @loveuqian 不这么写会报错,程序无法执行

    @zhNaMore 果然是这样,放到 didset 里就 OK 了,非常感谢
    zhNaMore
        9
    zhNaMore  
       2017-07-17 17:14:30 +08:00
    @jamfer 他的意思是你在如果在 tableView 初始化的时候就调用了 register()来注册这个 cell 的话 就不需要对这个 cell 做判空处理。因为注册了就一定会有的。除非你本身就没有这个对象。
    loveuqian
        10
    loveuqian  
       2017-07-20 14:34:03 +08:00
    @jamfer
    我写了这么多年,从没判断过 nil,也没见过报错
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1363 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:56 · PVG 01:56 · LAX 09:56 · JFK 12:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.