填充表格视图单元格创建空白单元格

时间:2017-08-19 01:06:09

标签: ios swift uitableview

我正在使用列表中的项填充表视图,当我向表视图添加多个项时,除第一个之外的所有单元格都是空白的。当我删除屏幕底部最低的单元格时,它会将该单元格中的数据放入下一个单元格中。我不确定我做错了什么,但是如果有人能够提供帮助,我的代码就在这里。

import UIKit

// Initialize the list that populates the each cell in the table view
var list = [AnyObject]()
let cell = UITableViewCell(style: UITableViewCellStyle.default, 
reuseIdentifier: "cell")

class FirstViewController: UIViewController, UITableViewDelegate, 
UITableViewDataSource {



@IBOutlet weak var myTableView: UITableView!



// Declares how many rows the table view will have
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    return (list.count)
}

// Populates each table view cell with items from each index in the list
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{

//        let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
//        cell.accessoryType = .checkmark
//        cell.textLabel?.textAlignment = .natural

    // The text of the cell = the data of index that matches the index of the cell
    cell.textLabel?.text = list[indexPath.row] as? String

    // Sets the background color of the cell
//        cell.backgroundColor = UIColor.clear

    return cell
}

// Allows user to remove item from table view by swiping left
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
{
    // if the user swiped left to delete an item from the table view
    if editingStyle == UITableViewCellEditingStyle.delete
    {
        // remove the deleted item from the list and reload the data
        list.remove(at: indexPath.row)
        myTableView.reloadData()
    }
}

3 个答案:

答案 0 :(得分:0)

你错过了很多东西。首先,您需要将mytableView的datasourcedelegate设置为self。此外,您需要初始化list中的viewDidLoad数组或在运行时调用的任何此类方法。并且一旦list数组被初始化。然后你需要拨打myTableView.reloadData()。最后,您的cellForRow应如下所示:

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

    let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) 
    cell.textLabel?.text = list[indexPath.row] as? String
    return cell
}

答案 1 :(得分:0)

第一步: - 转到你的故事板。选择FirstViewController场景,选择myTableView。 现在选择属性检查器 设置"原型细胞" value = 1

现在展开" myTableView"并选择" cell"。 再次选择属性检查器 设置标识符值" cell"。现在你已经完成了故事板。 转到FirstViewController并粘贴下面的代码

OR

只需在viewDidLoad()

中粘贴以下行即可
myTableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")

两者都相同

import UIKit

class FirstViewController: UIViewController,UITableViewDelegate,
UITableViewDataSource {

@IBOutlet weak var myTableView: UITableView!
var list = ["A", "B", "C","A", "B", "f"]

override func viewDidLoad() {
    super.viewDidLoad()
    myTableView.dataSource = self
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

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

// Populates each table view cell with items from each index in the list
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{

    //        let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
    //        cell.accessoryType = .checkmark
    //        cell.textLabel?.textAlignment = .natural

    // The text of the cell = the data of index that matches the index of the cell
    let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
    cell.textLabel?.text = list[indexPath.row]

    // Sets the background color of the cell
    //        cell.backgroundColor = UIColor.clear

    return cell
}

// Allows user to remove item from table view by swiping left
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
{
    // if the user swiped left to delete an item from the table view
    if editingStyle == UITableViewCellEditingStyle.delete
    {
        // remove the deleted item from the list and reload the data
        list.remove(at: indexPath.row)
        myTableView.reloadData()
    }
}

}

答案 2 :(得分:0)

我遇到了同样的问题,如果之前的任何答案都不起作用:我以编程方式进行了大部分设置。

定义全局变量 var cellsContent = [String]() // Change to any type you need

首先在 viewDidLoad 函数中创建带有标识符的单元格:

cellsContent = ["Text1", "Text2"]
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
tableView.reloadData()

使用 cellsContent var 中的项目填充每个表格视图单元格

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
cell.textLabel?.text = cellsContent[indexPath.row] as? String
cell.backgroundColor = UIColor.clear

return cell
}

设置节和每节行

override func numberOfSections(in tableView: UITableView) -> Int {
        return 1 // Change as needed
    }
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return cellsContent.count
    }