TableViewCell没有正确更新swift 2.2

时间:2016-05-23 06:56:24

标签: ios swift uitableview

在我的应用中,我创建了两个自定义的tableview单元格。

问题我现在面临的第二个tableview单元格更新仅包含数组的最后一个元素。

cellForRowAtIndexpath数组中,元素显示正常。

考虑[ "Value1", "Value2" ]是我的数组。在tableView中,只有value2显示在两个单元格中。

var title = ["value1","value2"]

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

        let row = indexPath.row

        let x = Id[indexPath.row]

        if x == 0{

        let cell1 = tableView.dequeueReusableCellWithIdentifier("Cell1", forIndexPath: indexPath) as! MyCell1

            return cell1
        }
        else{

      let cell2 = tableView.dequeueReusableCellWithIdentifier("Cell2", forIndexPath: indexPath) as! MyCell2

            for index in 0..<myArray.count{
        cell2.titleButton.setTitle(title[index],forState:UIControlState.Normal)
            }
            return cell2
        }
    }

我被困在这里,你的帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

以下是解决方案,因为它超出范围的原因是因为当每次向下滚动时调用cellforrowAtIndexPath来调整单元格时值会增加(因为当我们向下滚动时,某些单元格不可见并且这些单元格被推迟): -

    var name = ["HouseBolo","HouseBolo1","HouseBolo2","HouseBolo3"]
    var propertyVal:Int = 0
    var projectVal:Int = 0
    var type = ["Apartment","Villa","Home","Flat","Plot"]
    var arrangedData = [String]()
    var flatId = [0,1,2,0,0]

    override func viewDidLoad() {
        super.viewDidLoad()
        // I want the Expected Output in Tableview Cell is
        // 1. Apartment 2. HouseBolo 3. HouseBolo1 4. Villa 5. Home


        for item in flatId {
            if item == 0 {
                arrangedData.append(type[propertyVal])
                propertyVal+=1
            }
            else {
                arrangedData.append(name[projectVal])
                projectVal+=1
            }
        }
    }

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arrangedData.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let flatDetails = flatId[indexPath.row]

        // For Property Cell
        if flatDetails == 0{
            let cell = tableView.dequeueReusableCellWithIdentifier("Cell1", forIndexPath: indexPath) as? PropertyCell

            if(cell != nil) {
                cell!.pType.text = arrangedData[indexPath.row]
            }
           return cell!
        }
        // For Project Cell
        else {

            let cellan = tableView.dequeueReusableCellWithIdentifier("Cell2", forIndexPath: indexPath) as? ProjectCell

            if(cellan != nil)  {
             cellan!.projectName.setTitle(arrangedData[indexPath.row], forState: UIControlState.Normal)
            }
            return cellan!
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

答案 1 :(得分:0)

您需要使用:

let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! searchCell

in:

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

块。

searchCell:类型为:UITableViewCell

之后,进入Storyboard并使用以下命令更改单元格的标识符:“cell”

答案 2 :(得分:0)

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

您必须在 UITableViewCell

的位置添加您的自定义tableview单元格类名称

像这样 -

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->  **custom tableview cell class name**
{
}

并且在故事板中,更改单元格的标识符:&#34; cell1&#34;和&#34; cell2&#34;

答案 3 :(得分:0)

在代码中......

let cell2 = tableView.dequeueReusableCellWithIdentifier("Cell2", forIndexPath: indexPath) as! MyCell2

for index in 0..<myArray.count{
  cell2.titleButton.setTitle(title[index],forState:UIControlState.Normal)
}
return cell2

你正在迭代'myArray'并将值赋给'cell2.titleButton'。单元格2将始终为其标题分配最后一个值。它将它分配给'value1',然后将其重新分配给'value2'。循环遍历数组似乎是问题(假设单元格正在显示 - 只是始终显示数组中最后一项的标题。