切换视图的tag属性的语句

时间:2016-08-04 03:54:36

标签: ios swift uitableview

我正在尝试设置一个包含2个单元格的tableview。两个单元都有自己的类,并且它们有自己的方法来配置它们。在代码中,当我进入cellforrowatindexpath方法时,我卡住了。我只能将其中一个单元格出列并调用它的方法,这意味着不会配置其他单元格。我想配置两者。这是我(目前)在cellforrow方法中尝试的内容:

    let cells = [tableView.viewWithTag(1), tableView.viewWithTag(2)]



    for view in cells {

        var reuseIdentifier = "cellID"


        switch view?.tag {
        case 1:                           // error occurs here
            reuseIdentifier = "storyCell"
            let storyCell1 = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier, forIndexPath: indexPath) as! StoryCell1

            storyCell1.theCategory.text = newsItem.storyCategory
            storyCell1.theTitile.text = newsItem.titleText
            storyCell1.firstParagraph.text = newsItem.paragraph1

        case 2:                           // error occurs here too
            reuseIdentifier = "storyCell2"
            let storyCell2 = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier, forIndexPath: indexPath) as! StoryCell2
            storyCell2.configureCell(newsItem)


        default:

        }
在故事板中,我已经给出了这两个单元格分别为1和2的标签,因此在最开始时就是数组。我有这个方法的2个问题。

  1. 我无法使用它,因为switch语句给我一个错误:'Int'类型的表达式模式不能匹配'Int?'类型的值

  2. 即使没有上述错误,我仍然只能在方法结束时返回一个单元格。

  3. 任何有关我的方法的帮助或不同的,更好的方法来处理这一点将不胜感激。谢谢!

    编辑:

    因为我确定我已经添加了标签属性,所以强制解包视图!.tag属性并且错误消失了。那么,第二个问题现在仍然存在。

1 个答案:

答案 0 :(得分:2)

我真的不知道你想做什么。

我认为你要做的是在tableView(_:cellForRowAtIndexPath:)方法中配置和返回两个单元格。如果你真的想这样做,那你就错了。

表格视图的数据源方法提出问题。你的工作就是通过返回一个值来回答这些问题。例如,numberOfSectionsInTableView(_:)会询问您应该有多少个部分。答案示例可能是return 1return 10等。

同样,tableView(_:cellForRowAtIndexPath:)要求

  

应该在索引路径指定的部分和行中显示的单元格应该是什么?

你回答UITableViewCell回答。您无法返回两个单元格,因为它要求您提供要在 特定部分和行显示的单元格。如果你给它显示两个单元格,表格视图如何显示它们?这没有意义!表视图中的每一行只能显示一个单元格!

因此,不是给单元格添加标签,而是使用indexPath参数来决定要创建哪个单元格。

假设您希望第一行显示标识符为“storyCell”的单元格。并且您希望第二行显示标识符为“storyCell2”的单元格。而您的表视图只有一个部分。你可以这样做:

    switch indexPath.row {
    case 0:
        reuseIdentifier = "storyCell"
        let storyCell1 = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier, forIndexPath: indexPath) as! StoryCell1

        storyCell1.theCategory.text = newsItem.storyCategory
        storyCell1.theTitile.text = newsItem.titleText
        storyCell1.firstParagraph.text = newsItem.paragraph1
        return storyCell1

    case 1:
        reuseIdentifier = "storyCell2"
        let storyCell2 = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier, forIndexPath: indexPath) as! StoryCell2
        storyCell2.configureCell(newsItem)
        return storyCell2

    default:
        // this shouldn't be reached if you do your other data source methods correctly
        return UITabeViewCell()
    }

你应该删除这些废话:

let cells = [tableView.viewWithTag(1), tableView.viewWithTag(2)]



for view in cells {

    var reuseIdentifier = "cellID"