从OptionalListViewController到UILabel的string1出口无效。奥特莱斯无法连接到重复内容

时间:2015-09-25 14:47:41

标签: swift

帮助解决错误 从OptionalListViewController到UILabel的string1出口无效。无法将插座连接到重复内容。

代码:

@IBOutlet var string1: UILabel!

@IBOutlet var string2: UILabel!

@IBOutlet var string3: UILabel!

@IBOutlet var string4: UILabel!

@IBOutlet var string5: UILabel!

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


        let cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)


        let dic:NSDictionary = _items.objectAtIndex(indexPath.row) as! NSDictionary
        print(" Plist:\(dic)")

        let str0:NSString = dic["0"]! as! NSString
        let str1:NSString = dic["1"]! as! NSString
        let str2:NSString = dic["2"]! as! NSString
        let str3:NSString = dic["3"]! as! NSString
        let str4:NSString = dic["4"]! as! NSString
        let str5:NSString = dic["5"]! as! NSString
        let str6:NSString = dic["6"]! as! NSString
        let str7:NSString = dic["7"]! as! NSString
        let str8:NSString = dic["8"]! as! NSString

        string1.text = (str0 as String) + (str1 as String)
        string2.text = (str2 as String) + (str3 as String)
        string3.text = (str4 as String) + (str5 as String)
        string4.text = (str6 as String) + (str7 as String)
        string5.text = (str4 as String) + (str8 as String)

        return cell
}

我不明白如何解决..

2 个答案:

答案 0 :(得分:0)

您无法将IBOutlet连接到故事板上tableView中的单元格。如果要连接插座,则需要创建一个新的UITableViewCell子类并设计单元格。确保选中创建.xib文件的选项

enter image description here

您可以像查看控制器故事板一样将标签添加到此xib,并将它们连接到自定义单元代码,而不是视图控制器代码(xib是界面生成器文件)。这就是它的样子......非常类似于您的视图控制器故事板: enter image description here

然后,您可以像使用普通单元一样使用自定义单元格,只需使用自定义类而不是UITableViewCell。

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


        let cell:MyTableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)


        let dic:NSDictionary = _items.objectAtIndex(indexPath.row) as! NSDictionary
        print(" Plist:\(dic)")

        let str0:NSString = dic["0"]! as! NSString
        let str1:NSString = dic["1"]! as! NSString
        let str2:NSString = dic["2"]! as! NSString
        let str3:NSString = dic["3"]! as! NSString
        let str4:NSString = dic["4"]! as! NSString
        let str5:NSString = dic["5"]! as! NSString
        let str6:NSString = dic["6"]! as! NSString
        let str7:NSString = dic["7"]! as! NSString
        let str8:NSString = dic["8"]! as! NSString

        string1.text = (str0 as String) + (str1 as String)
        string2.text = (str2 as String) + (str3 as String)
        string3.text = (str4 as String) + (str5 as String)
        string4.text = (str6 as String) + (str7 as String)
        string5.text = (str4 as String) + (str8 as String)

        return cell
}

答案 1 :(得分:0)

使用动态细胞类型:

在storyboard tableview中,选择动态原型单元格并添加至少一个原型单元格,具体取决于您需要自定义的数量。 Adding prototype cell to table view

现在你的tableview应该从tableview中的0个单元格转到至少一个原型单元格。Example tableview with one prototype cell  你在这里做了什么告诉tableview为每次调用cellForRowAtIndexPath而不是仅仅使用静态单元格而不是仅使用静态单元格,而是在大型tableview列表中使用静态单元格。

现在选择该原型单元并为其提供重用标识符。 Here I the reuse identifier is "teamCell"

设计它。你可以看到我有几个简单的图像视图和标签

使用iboutlet在代码中为它创建一个子类,并将它们连接到您设计的单元出口。这里的关键,我认为你的整个问题的真正答案是选择原型单元格,转到出口标签,然后拖放到你看到单元格列出的属性而不是视图控制器或tableview:

enter image description here

Subclass with connected IBOutlets

选择原型单元格(目前是UITableViewCell)并将其类设置为UITableViewCell子类。

Set subclass

确保在cellForRow方法中出列正确的单元格。

Dequeing cell

在所有这些之前,请确保您已经为tableview考虑了一个良好的数据结构,因为每次滚动tableview并使单元格出列时,您需要能够保持其状态。