从单元格向上传播值到视图控制器

时间:2016-03-26 02:38:02

标签: ios swift

首先,我有这个人结构:

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)
}

对于字段相对较少的对象看起来没问题,但在我的应用程序中有很多属性。我正在寻找有关更好的方法从动态单元格提取传播信息到视图控制器使用的意见。

0 个答案:

没有答案