无法打开可选项。没有UITableViewCell

时间:2014-06-10 11:10:56

标签: ios uitableview swift xcode6

我的表视图中包含自定义表格视图单元格。我的问题是,当我尝试为自定义UITableViewCell中的变量赋值时,我得到了声明的错误。现在,我认为它是因为上述变量没有初始化,但它让我完全难过。

这是自定义表格单元格:

import Foundation
import UIKit

class LocationGeographyTableViewCell: UITableViewCell
{
    //@IBOutlet var Map : MKMapView;

    @IBOutlet var AddressLine1 : UILabel;
    @IBOutlet var AddressLine2 : UILabel;
    @IBOutlet var County : UILabel;
    @IBOutlet var Postcode : UILabel;
    @IBOutlet var Telephone : UILabel;

    var location = VisitedLocation();

    func Build(location:VisitedLocation) -> Void
    {
        self.location = location;

        AddressLine1.text = "test";
    }
}

我在索引路径的行的单元格是:

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

        var addressCell = tableView.dequeueReusableCellWithIdentifier("ContactDetail") as? LocationGeographyTableViewCell;

        if !addressCell
        {
            addressCell = LocationGeographyTableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "ContactDetail");
        }

        addressCell!.Build(Location);

        return addressCell;
    }

正如我所说,我完全感到困惑,Build函数调用UITableViewCell中的正确函数。

感谢任何帮助。

TA

2 个答案:

答案 0 :(得分:0)

我刚刚使用您的代码创建了一个简单的项目,并且我有一个零“AddressLine1”标签,这会导致您遇到同样的错误。我认为我们有同样的问题。

我通过将标识符“ContactDetail”添加到我的故事板中的原型单元格来解决它。

我还建议您稍微更改一下代码:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {        
    // This newer API ensures that you always get a cell, so no need for optionals. 
    // Also note the "let" that is preferred since you don't plan on changing addressCell
    let addressCell = tableView.dequeueReusableCellWithIdentifier("ContactDetail", forIndexPath: indexPath) as LocationGeographyTableViewCell; 

    //addressCell.Build(Location); // the cell is a view, views should not know about model objects

    addressCell.AddressLine1 = Location.addressLine1
    // ... same for all labels, or do all that in a "configureCell" function

    return addressCell;
}

答案 1 :(得分:0)

我终于解决了它。我没有使用故事板来定义UITableViewCell(我在父视图控制器中完成),而是使用内容创建了一个Xib,并将其连接到单元格的类,在TableViewController中引用它并分配它在单元格创建的方法中。

viewDidLoad()
{
        var nib = UINib(nibName: "LocationTableViewCell", bundle: nil)

        tableView.registerNib(nib, forCellReuseIdentifier: "locationCell")  
}

var cell:LocationGeographyTableViewCell = self.tableView.dequeueReusableCellWithIdentifier("locationCell") as LocationGeographyTableViewCell
cell.AddressLine1.text = "teetetette";
return cell;