使用Swift的单个tableview在2个数据模型之间进行数据传输

时间:2015-08-23 04:43:45

标签: ios swift uitableview uisegmentedcontrol

我有两个数据模型。一个用于待办事项,一个用于已完成的物品。在这两个模型中,只需要项目的内容和标志(如果已完成)。以下是代码:
对于待办事项:

class TodoList: NSObject {
    var task: String
    var completed: Bool

    init(task: String) {
        self.task = task
        self.completed = false
    }
}

对于已完成的项目:

class CompletedList: NSObject {
    var task: String
    var completed: Bool

    init(task: String) {
        self.task = task
        self.completed = true
    }
}

我想要实现的是,当待办事项列表中的项目标记为已完成时,它将从待办事项模型中移除并移动/复制到已完成的项目模型。我怎样才能让它发挥作用?感谢。

PS:这两个数据模型将共享一个具有分段控制的表视图。

修改 也许我之前的陈述令人困惑。让我重新说一下:
我设置了一个带分段控制的UITableView 分段控制有两个部分,"待办事项" &安培; "完成&#34 ;.
当"待办事项"如果选中,表视图将显示未完成的项目列表。当"完成"如果选中,表格视图将显示已完成项目的列表 实现这一目标的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

一些反应:

  1. 您的类名称表示这些代表任务列表,但实现(即任务描述和已完成状态)表明这些类代表各个任务。我建议你澄清一下你的模型,可能有两种类型的实体(个别任务和任务集合)的单独类。

  2. 我建议使用一个Task课程。唯一的问题是如何捕获todo vs complete州:

    • 您可以仅将完成状态表示为Task

      的属性
      class Task {
          var title: String
          var completed: Bool
      
          init(title: String, completed: Bool = false) {
              self.title = title
              self.completed = completed
          }
      }
      

      然后,您可以拥有所有任务的集合:

      var tasks = [Task]()
      

      然后,当您想要完成任务的列表时,您可以:

      let completed = tasks.filter() { $0.completed }
      

      或者,同样,待办事项列表:

      let todo = tasks.filter { !$0.completed }
      

      如果您有很长的列表,这种实现是不切实际的,但对于一个简单的问题列表,这是一种简单的方法。

    • 或者,您可以简化任务类,删除completed状态:

      class Task {
          var title: String
      
          init(title: String) {
              self.title = title
          }
      }
      

      然后维护任务集合(数组或集合或对您的应用程序有意义的任何内容):

      var todo = [Task]()
      var completed = [Task]()
      

      然后,当您想要将项目从待办事项列表移动到已完成列表时,您只需将其从一个项目中移除并将其添加到另一个项目中。

      func completeTodoTaskAtIndex(index: Int) {
          if index < todo.count {
              let task = todo[index]
              todo.removeAtIndex(index)
              completed.append(task)
          }
      }
      
  3. 一旦找到适合您的应用的模型,然后让tableview正确显示结果非常简单。因此,首先确定模型,其余的将遵循逻辑。

答案 1 :(得分:0)

数据模型无关紧要。因为这些与您的观点无关。您必须设置将呈现给tableview的数据。

  

这两个数据模型将共享一个表视图   分段控制。

您可以从tableView委托中进行设置。像:

override func numberOfSectionsInTableView(tableView: UITableView!) -> Int {
    return 2
}

override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
    if section == 0
        return toDoTask.count
    else
        return completedTask.count

}

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {

    //Check the section and return data if it is completed or incomplete
    return cell
}