经过几个小时的努力弄清楚为什么我的海关细胞没有显示出来之后,我已经碰了一下。使用MVC模式:
struct studentProperties {
var _title : String!
var _forename : String!
var _surname : String!
}
class MainModel {
// Singleton instances
static let modelInstance = MainModel()
static var structInstance = studentProperties()
// Array of structs
var studentArray: [studentProperties] = []
// MARK: - Initialization
private init() {}
func studentInput(title: String, forename: String, surname: String) {
MainModel.structInstance._title = title
MainModel.structInstance._forename = forename
MainModel.structInstance._surname = surname
}
}
我不会显示整个文件,但是此代码位于保存按钮内 - 用户输入数据,并且该数据会附加到模型中的数组
@IBAction private func saveNewStudentButton(_ sender: UIBarButtonItem) {
// Put student data into the struct properties in model
MainModel.modelInstance.studentInput(title: studentTitle.text!, forename: studentForename.text!, surname: studentSurname.text!)
// Append the user input
MainModel.modelInstance.studentArray.append(MainModel.structInstance)
dismiss(animated: true, completion: nil)
performSegue(withIdentifier: "returnToStudentsList", sender: sender)
}
class MainStudentController: UIViewController, UITableViewDelegate, UITableViewDataSource {
//MARK: - @IBOutlets
@IBOutlet weak var myTableView: UITableView!
//MARK: - @IBActions
@IBAction func addStudentButton(_ sender: UIBarButtonItem) {
dismiss(animated: true, completion: nil)
performSegue(withIdentifier: "createStudentSegue", sender: sender)
}
override func viewDidLoad() {
super.viewDidLoad()
myTableView.delegate = self
myTableView.dataSource = self
myTableView.reloadData()
}
// MARK: - Table view data source
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print(MainModel.modelInstance.studentArray.count)
return MainModel.modelInstance.studentArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: MainCell = self.myTableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MainCell
cell.studentTitle?.text = MainModel.modelInstance.studentArray[0]._title
cell.studentForename?.text = MainModel.modelInstance.studentArray[0]._forename
cell.studentSurname?.text = MainModel.modelInstance.studentArray[0]._surname
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
myTableView.deselectRow(at: indexPath, animated: true)
}
}
还有另一个文件 - 它是UITableViewCell,但它实际上只有我的自定义单元格的出口。
我目前遇到的问题是(我认为)围绕这种方法?:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print(MainModel.modelInstance.studentArray.count)
return MainModel.modelInstance.studentArray.count
}
用户输入数据 - >它会附加到该数组 - >因此,现在我使用数组中的那些元素来表示将会有的行数。
可悲的是,它目前没有显示任何行?我可以添加多个元素,它仍然不会显示任何行。然而,当我打印出相同的行时,它显示内部有元素(取决于我添加新数据的次数)。我有点困惑为什么这不是添加行?
我不确定这是我遗漏的东西还是代码中的错误。如果有人能看到我哪里出错了,我将不胜感激?
希望这能解释我的情况。
由于
答案 0 :(得分:1)
根据此代码,您的问题只是表视图本身没有重新加载。您唯一的重新加载调用位于viewDidLoad
,因此只有在您的视图第一次加载时才会加载(该方法只被调用一次)。您可以将myTableView.reloadData()
从viewDidLoad
移至viewWillAppear
或viewDidAppear
,从而轻松解决此问题。这应该就是你需要做的一切。
这样的事情:
override func viewWillAppear() {
super.viewWillAppear()
myTableView.reloadData()
}