在UITableView中加载数据时,cell.contentView.viewWithTag给出nil值

时间:2016-08-20 07:44:44

标签: ios swift uitableview viewwithtag

我希望在UITableView的第一条记录中捕获图片点按事件,当用户点击我cell.imageAvtar时,我只想拍摄该事件。

这是我正在使用的代码

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
                let cell = tableView.dequeueReusableCellWithIdentifier("details", forIndexPath: indexPath) as! AccountCell
                if (indexPath.row == 0) {
    (cell.contentView.viewWithTag(101) as! UIImageView).image = UIImage(named: "no_image_available.jpg")
    }
return cell
}

但是(cell.contentView.viewWithTag(101)正在返回nil。我已尝试(cell.contentView.viewWithTag(100)尝试过(cell.imageAvtar.viewWithTag(101)。

3 个答案:

答案 0 :(得分:0)

检查界面构建器或故事板中的imageView标签是否为0,将其设为101并重试..

您也可以查看

for subView in cell.contentView.subView {
    print("subView tag --> \(subView.tag)!")
}

在你的cellForRowAtIndexPath中尝试这个

答案 1 :(得分:0)

尝试,

cell.viewWithTag(101)self.view.viewWithTag(101)如果标记是唯一的(例如,如果您未在其他地方使用此标记)。

第二件事你必须添加gesture recognizer来捕获事件。你怎么知道它返回零?它可能不会返回零。你又犯了一个错误。确保项目中no_image_available.jpg正确可用!

另一件事是确保你已正确设置标签。

答案 2 :(得分:0)

我使用IBOutlets作为vadian,jrturton建议。

这是工作代码

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("details", forIndexPath: indexPath) as! AccountCell
                if (indexPath.row == 0) {  let tapGestureRecognizer = UITapGestureRecognizer(target:self, action:Selector("imageTapped:"))
                cell.imageAvtar.userInteractionEnabled = true
                cell.imageAvtar.addGestureRecognizer(tapGestureRecognizer)
    }
    }
     func imageTapped(img: AnyObject)
        {
                 print("event captured")
                //your logic comes here
        }