首先,我有这个人结构:
struct Person {
var name: String
var address: String
init(name: String, address: String) {
self.name = name
self.address = address
}
}
我希望显示有两个属性,并允许在tableView上进行编辑。
我有以下UITableViewController
使用动态原型单元格显示一堆信息:
class TableViewController: UITableViewController {
var person: Person!
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
switch indexPath.row {
case 0:
guard let cell = tableview.dequeueReusableCellWithIdentifier("CellOne") as? CellOne else { fatalError() }
cell.person = person
cell.configure()
case 1:
guard let cell = tableView.dequeueReusableCellWithIdentifier("CellTwo") as? CellTwo else { fatalError() }
cell.person = person
cell.configure()
}
}
func updatePersonToServer() {
Server.sharedInstance.updatePerson(person)
}
// other tableView methods...
}
以下是UITableViewCell
子类之一:
class CellOne: UITableViewCell {
@IBOutlet var nameField: UITextField!
weak var person: Person?
func configure() {
nameField.text = person?.name
}
}
这个想法是这个tableViewController传递了一个Person
结构并将其显示在tableView中。它允许用户编辑信息,如果他们这样做,他们可以将新的东西保存到服务器。
我想就各种方法提出一些意见。我想做的一种方法是:
func updatePersonToServer() {
let nameCell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0)) as! CellOne
let addressCell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0)) as! CellTwo
person.name = nameCell.textField.text!
person.address = addressCell.textField.text!
Server.sharedInstance.updatePersonToServer(person)
}
对于字段相对较少的对象看起来没问题,但在我的应用程序中有很多属性。我正在寻找有关更好的方法从动态单元格提取传播信息到视图控制器使用的意见。