无法在UIViewController中为UITableViewCell创建实例

时间:2015-04-02 12:48:33

标签: ios uitableview swift

我正在使用tableview列出我的产品。在" cellForRowAtIndexPath"中,在" dequeueReusableCellWithIdentifier"的帮助下,我们可以访问UITableViewCell的属性。例如,

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

var cell1 = product_tableview.dequeueReusableCellWithIdentifier("productmain", forIndexPath: indexPath) as product_tblCell

cell1.label1.text = "PRODUCT 1"
return cell1
}

但是,如果我们想在此范围之外使用,在此viewController本身中,我们如何访问该UITableViewCell属性?

如果我在这个viewController中创建了这样的任何UIButton动作,

var prop_cell = product_tableview.dequeueReusableCellWithIdentifier("productmain") as product_tblCell 

prod_cell.label1.text = "PRODUCT 5"
//NO ERROR SHOWN. BUT FATAL ERROR IN DEBUG AREA.
//UNABLE TO RUN

我的致命错误。 这是我在UITableView中的主要疑问。请回答这个问题。不要只是De-Vote。请指导我。

2 个答案:

答案 0 :(得分:0)

嗯,真正的问题是你为什么要出列/访问单元格? 我想也许您想要更新您的手机标签,也许您想将“产品1”名称更新为“产品5” 为此,您需要确定哪个indexPath具有“产品1”并使用以下代码。

cellForRowAtIndexPath(_ indexPath: NSIndexPath) -> UITableViewCell

给它indexPath,它会返回tableViewCell。

您可以使用

创建自己的NSIndexPath
init!(forRow row: Int,
   inSection section: Int) -> NSIndexPath

答案 1 :(得分:0)

您也可以尝试这两种方法。

方法1:

在使用相同标记创建和检索单元格时,将标记添加到单元格。

您可以按如下方式添加标记

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell1 = product_tableview.dequeueReusableCellWithIdentifier("productmain", forIndexPath: indexPath) as product_tblCell

    cell1.label1.text = "PRODUCT 1"
    cell1.tag = 1
    return cell1
}

并像这样检索

func buttonTapped(sender: AnyObject) {
    var cellTag:Int = 1;//this is same at table cell row number.
    var cell = self.tableView.viewWithTag(cellTag) as UITableViewCell
    cell.label1.text = "PRODUCT 5"
}

方法2:

使用标志

在按钮单击上设置一个标志,然后重新加载表格数据

func buttonTapped(sender: AnyObject) {
    isButtonTapped = true
    self.tableView.reloadData()
}

重新加载表格视图

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell1 = product_tableview.dequeueReusableCellWithIdentifier("productmain", forIndexPath: indexPath) as product_tblCell

    if(isButtonTapped){
       cell1.label1.text = "PRODUCT 5"
    }else{
       cell1.label1.text = "PRODUCT 1"
    }
    return cell1
}

方法3:

创建自定义UITableViewCell类,并使用自定义单元格委托方法处理UITableViewController中的按钮单击

供参考,请在故事板中查看Crafting Custom UITableView Cells。 http://code.tutsplus.com/tutorials/ios-sdk-crafting-custom-uitableview-cells--mobile-15702