任何人都可以帮助我吗?我正在使用tableView并尝试使用Bar Button项目输入用户输入的值,但每当我点击save alert action时,self.tableView.reloadData()都不起作用!
代码如下:
import UIKit
class ViewController: UIViewController {
var names:[String]=[]
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.title="The List"
tableView.register(UITableViewCell.self, forCellReuseIdentifier:
"Cell")
}
@IBAction func addName(_ sender: UIBarButtonItem) {
let alert = UIAlertController(title: "New Name",
message: "Add a new name",
preferredStyle: .alert)
let saveAction = UIAlertAction(title: "Save",
style: .default) {
[unowned self] action in
guard let textField =
alert.textFields?.first,
let nameToSave = textField.text
else {
return
}
self.names.append(nameToSave)
self.tableView.reloadData()
}
let cancelAction = UIAlertAction(title: "Cancel",
style: .default)
alert.addTextField()
alert.addAction(saveAction)
alert.addAction(cancelAction)
present(alert, animated: true)
}
}
extension ViewController:UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section:
Int) -> Int {
return names.count
}
func tableView(_ tableView: UITableView,cellForRowAt indexPath:
IndexPath)-> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier:
"Cell",for: indexPath)
cell.textLabel?.text = names[indexPath.row]
return cell
}
}
任何人都可以找到这个错误吗?
答案 0 :(得分:0)
您必须设置委托/数据源才能使用UITableViewDataSource和UITableViewDelegate方法。
您可以在Interface Builder中执行此操作,右键单击表视图,并将delegate / datasource链接到ViewController。
或者您可以在viewDidLoad中的代码中执行此操作:
tableView.delegate = self
答案 1 :(得分:0)
我建议首次加载该视图控制器时验证是否正在调用数据源方法(例如,numberOfRowsInSection)。因此,您在确认是否确实调整了reloadData之后,确实确实已经确定了相应的数据源,并且当您点击“保存'警报行动。我用您的代码设置了一个项目,一切正常:在UIAlertController中添加了一个名称,点击了' Save',调用了reloadData,表格显示了新名称。只需将其添加到viewDidLoad:
tableView.dataSource = self
还要确保您的tableview单元格在界面构建器中指定了其重用标识符。选择表格视图单元格,然后在“属性”检查器中确保'标识符'字段使用您在代码中设置的相同名称填充(例如,forCellReuseIdentifier)。
希望这有帮助。