以编程方式在swift中添加UITableViewCell

时间:2016-05-11 03:05:50

标签: swift uitableview

我正在尝试以编程方式在swift中添加UITableViewCells并收到以下错误消息:

  

2016-05-10 21:58:41.961 appname [28802:2378292] ***由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无法在bundle中加载NIB:'NSBundle(loaded)'的名称'了myCell''

我的viewDidLoad中有以下内容:

let myNib = UINib(nibName: "myCell", bundle: nil)
tableView.registerNib(myNib, forCellReuseIdentifier: "UITableViewCell")

以及func tableView中的以下内容:

 var cell:UITableViewCell! = tableView.dequeueReusableCellWithIdentifier("UITableViewCell", forIndexPath:indexPath)

        print("setup cell")

        if cell == nil{
            print("cell == nib")
            let cellnib = [NSBundle.mainBundle().loadNibNamed("myCell", owner:self, options: nil)]
            cell = cellnib.first! as! UITableViewCell
        }

2 个答案:

答案 0 :(得分:2)

我建议您阅读Table View Programming Guide。这是一个很长的,用ObjC写的,但非常值得。

对于您的问题,您不会像这样创建UITableViewCell。试试这个:

var cell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath:indexPath)

if cell == nil {
    print("setup cell")
    cell = UITableViewCell(style: .Default, reuseIdentifier: "myCell")
}

答案 1 :(得分:0)

实际上您可以像这样创建表格单元格,但是您需要将该代码放在init中而不是在viewDidLoad中:

   required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        self.registerNib(UINib(nibName: "myCell", bundle: nil), forCellReuseIdentifier: Identifier)
    }

但请确保您的项目中存在myCell.xib。创建它右键单击左侧的项目目录并选择新文件。然后选择iOS - >来源 - > Cocoa Touch Class。在类名中使用:myCell和Sub Class为UITableViewCell。选中标记还会创建XIB文件:

Preview