Surafel
Surafel

Reputation: 147

Give different number of Rows for multiple cells in UITableView

enter image description here

Hello, i have created a UITableView in which it has two different cells DynamicFormCell and StaticFormCell, so the DynamicFormCell can be displayed number of times i have a data from a server telling me how many forms i need for the DynamicFormCell and the StaticFormCell is always the same and doesn't change so i am having difficulty giving different number of rows for each cell.i tried giving the two cell a tag of 0 and 1 respectively and used this code:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if(tableView.tag == 0){
            return 5//return five dynamic cells
        }
        if(tableView.tag == 1){
            return 1//return one static cell
        }
    }

but this doesn't work and i also tried removing all the tags and if statements in the above code and just doing this return 5 this just gave me one DynamicFormCell and five StaticFormCells.

i also gave different classes for the two cells so i can assign them separately:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        if(indexPath.row == 0){
            //firstRow make dynamic
            let cell = tableView.dequeueReusableCell(withIdentifier: "DynamicFormsCell") as! DynamicFormsCell
            return cell
        }else{
            //static form data
            let cell = tableView.dequeueReusableCell(withIdentifier: "StaticFormsCell") as! StaticFormsCell
            return cell
        }
    }

so my question is, is it possible to do this using table views and how can i do it? if not what other options do i have?

Upvotes: 1

Views: 1909

Answers (2)

Geart Otten
Geart Otten

Reputation: 308

What you're doing right now is checking if the TableView's tag is 0 or 1. Which is not you want to do, since you're using only one TableView.

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return (amount of DynamicCellsYouWant + amount of StaticCellsYouWant)
}

The second part of your code only works when you want the first cell to be a DynamicFormsCell and the rest to be a StaticFormsCell.

Upvotes: 1

Hima
Hima

Reputation: 1247

Yes it is possible to have multiple types of cell in single tableview. It has nothing to do with function

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int

You should return there cells as,

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
 return (count of dynamic cells + count of static cells)
}

I assume, you only have to display static cells in the bottom. So if there are total 5 cells then 4 cells are dynamic and 5th cell would be static.

So code for, cellForRowAt indexPath: will be,

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        if(indexPath.row < (count for dynamic cells)){
            //first 4 Rows make dynamic
            let cell = tableView.dequeueReusableCell(withIdentifier: "DynamicFormsCell") as! DynamicFormsCell
            return cell
        }else{
            //last row static form data
            let cell = tableView.dequeueReusableCell(withIdentifier: "StaticFormsCell") as! StaticFormsCell
            return cell
        }
    }

Upvotes: 1

Related Questions