在Swift中通过标记访问UITableViewCell内部的不同视图

时间:2014-08-28 17:10:04

标签: ios uitableview swift xcode6

我尝试使用swift为iOS 8制作应用。这里的目标是制作一种新闻源。此Feed会显示来自用户的帖子,这些帖子遵循特定模式。

我想过使用UITableView,其中每个单元格都遵循自定义布局。当我尝试访问其中的文本标签时出现问题。我尝试通过其标签访问它,但是当我这样做时,整个应用程序崩溃了。报告的错误是"Swift dynamic cast failed",我使用以下代码访问该视图:

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {

    let cellId: String = "cell"

    var cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellId) as UITableViewCell

    if let ip = indexPath{
        cell.textLabel.text = myData[ip.row] as String
        var lbl = cell.contentView.viewWithTag(0) as UILabel
        lbl.text = "ola"
    }

    return cell
}

我做错了吗?提前谢谢!

3 个答案:

答案 0 :(得分:9)

我认为问题是标记0.所有视图都是默认值0.所以尝试另一个标记值。

答案 1 :(得分:2)

刚遇到同样的问题。解决方案是将标签更改为10和20.我之前使用过1和2。有人知道系统使用的一系列标签吗?

所以我的' cellForRowAtIndexPath'对于带有图像和每行标签的表,现在看起来像这样:

internal func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if let cell = tableView.dequeueReusableCellWithIdentifier("cellIdentifier") as? UITableViewCell {
        (cell.contentView.viewWithTag(10) as UIImageView).image = IMAGES[indexPath.row]
        (cell.contentView.viewWithTag(20) as UILabel).text = LABELS[indexPath.row]

        return cell
    } else {
        NSLog("Prototype did not work")
        return UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "errorIdentifier")
    }
}

答案 2 :(得分:0)

将0更改为1或其他标签,它对我有用。

0与另一个单元格标签的标签重叠。