【发布时间】:2020-12-23 02:02:18
【问题描述】:
在开始之前只想说这是一个相当长的条目。
表格视图、按钮和文本字段一直存在问题。我要做的主要事情是创建一个待办事项列表并将其放在单独的页面上。
让用户能够输入无任务并单击保存按钮,并能够向下滑动文本字段和保存按钮的视图。回到tableView的主页面,将输入的值更新或刷新到tableview。
问题是,到目前为止,我必须重置应用程序才能更新 tableView。使用了reloadData() 和ViewDidAppear() 方法。但是 tableView 由于某种原因不想更新。已将值打印到控制台,但在按下保存按钮后,控制台在每次按下保存按钮后显示一个。所以无论添加多少item,app总是落后一个,按下save按钮后tableView也不会刷新。
在这个问题上困扰了大约一个月,正在寻求帮助。
以下是运行项目的 YouTube 视频链接: https://www.youtube.com/watch?v=G7cji9RUUpo&feature=youtu.be
下面是代码:
import UIKit
class ViewController: UIViewController, UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource {
lazy var refreshData: UIRefreshControl = {
let dataRefresh = UIRefreshControl();
dataRefresh.addTarget(self, action: #selector(dataRequest), for: .valueChanged)
self.tableView?.reloadData();
return dataRefresh;
}()
var listedCells: [String] = []
internal func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return listedCells.count
}
internal func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cells = UITableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: "TDList")
cells.textLabel?.text = listedCells[indexPath.row
return cells
}
override func viewDidLoad() {
super.viewDidLoad()
}
@objc
func dataRequest() {
let endRefresh = DispatchTime.now() + .milliseconds(400);
DispatchQueue.main.asyncAfter(deadline: endRefresh) {
self.refreshData.endRefreshing();
}
self.tableView?.reloadData();
refreshData.endRefreshing();
self.tableView?.reloadData();
}
override func viewDidAppear(_ animated: Bool) {
if #available(iOS 10.0, *) {
tableView?.refreshControl = refreshData;
} else {
tableView?.addSubview(refreshData);
}
textField?.clearButtonMode = .always;
textField?.clearButtonMode = .whileEditing;
tableView?.delegate = self;
tableView?.dataSource = self;
let savedToDo = UserDefaults.standard.object(forKey: "ThingAdded")
if let savedToList = savedToDo as? [String] {
listedCells = savedToList;
}
self.tableView?.reloadData();
}
func tableView(_ tableView: UITableView, commit deleteSlider: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if deleteSlider == UITableViewCell.EditingStyle.delete {
listedCells.remove(at: indexPath.row)
self.tableView?.reloadData();
UserDefaults.standard.set(listedCells, forKey: "ThingAdded")
}
}
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var textField: UITextField!
@IBAction func saveButton(_ sender: Any?) {
let savedToDo = UserDefaults.standard.object(forKey: "ThingAdded")
if let savedUpdated = savedToDo as? [String] {
listedCells = savedUpdated;
listedCells.append(textField.text!);
print(listedCells);
} else {
listedCells = [textField.text!];
}
UserDefaults.standard.set(listedCells, forKey: "ThingAdded");
// right handed and left handed mode
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true);
}
public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true;
}
}
【问题讨论】:
标签: swift uitableview button uibutton reloaddata