我正在使用列表中的项填充表视图,当我向表视图添加多个项时,除第一个之外的所有单元格都是空白的。当我删除屏幕底部最低的单元格时,它会将该单元格中的数据放入下一个单元格中。我不确定我做错了什么,但是如果有人能够提供帮助,我的代码就在这里。
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()
}
}
答案 0 :(得分:0)
你错过了很多东西。首先,您需要将mytableView的datasource
和delegate
设置为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
}