1
我正在製作一個任務共享應用程序,您可以與多個人共享多個任務列表(例如與您的配偶一個,您的孩子一個等)。每個列表的數據源都是一個名爲TaskList
的結構,所以我將有多個TaskList
實例。我應該在哪裏初始化這些實例?在哪裏初始化UITableViewController中的多個實例的結構
我是新來的,任何幫助將不勝感激!
這是創建使用結構任務列表任務列表中UITableViewController
代碼:
import UIKit
class LoLFirstTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 60.0
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tasks.count
}
@IBAction func cancelToLoLFirstTableViewController(_ segue:UIStoryboardSegue) {
}
@IBAction func saveAddTask(_ segue:UIStoryboardSegue) {
if let AddTaskTableViewController = segue.source as? AddTaskTableViewController {
if let task = AddTaskTableViewController.task {
tasks.append(task)
let indexPath = IndexPath(row: tasks.count-1, section: 0)
tableView.insertRows(at: [indexPath], with: .automatic)
}
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TaskCell", for: indexPath) as! TaskCell
let task = tasks[indexPath.row]
cell.task = task
if cell.accessoryView == nil {
let cb = CheckButton()
cb.addTarget(self, action: #selector(buttonTapped(_:forEvent:)), for: .touchUpInside)
cell.accessoryView = cb
}
let cb = cell.accessoryView as! CheckButton
cb.check(tasks[indexPath.row].completed)
return cell
}
func buttonTapped(_ target:UIButton, forEvent event: UIEvent) {
guard let touch = event.allTouches?.first else { return }
let point = touch.location(in: self.tableView)
let indexPath = self.tableView.indexPathForRow(at: point)
var tappedItem = tasks[indexPath!.row] as Task
tappedItem.completed = !tappedItem.completed
tasks[indexPath!.row] = tappedItem
tableView.reloadRows(at: [indexPath!], with: UITableViewRowAnimation.none)
}
}
這是任務列表代碼:
import UIKit
struct TaskList {
var buddy: String
var phoneNumber: String
var tasks: [Task]
}
我對TaskListsManager方法稍微感到滿意,所以這就是我現在正在實施的方法。以下幾行的目的是什麼?在更改taskListsManager後更新數據? firstViewController.taskListsManager = tasksListsManager secondViewController.taskListsManager = taskListsManager –
@BobF。有點。如果你想只有一個經理實例,你必須在viewcontrollers之間傳遞它。因此,當您的應用程序啓動時,您創建TaskListsManager的一個實例,然後將其傳遞給您的第一個viewconteroller,然後如果您需要導航到另一個viewcontroller,您將管理器實例從第一個控制器傳遞到第二個。數據更新是一個不同的問題,爲此,您可以使用通知(https://developer.apple.com/documentation/foundation/notificationcenter)或協議/代理。 –
@Nikita_Gaydukov啊,好的。那麼這些行應該在TaskListsManager對象中?或者在UITableViewController中?因爲如果我將它們放在UITableViewController中,則出現「任務」的任何地方都會收到「未解析的標識符任務」錯誤。 let taskListsManager = TaskListsManager() firstViewController.taskListsManager = taskListsManager secondViewController.taskListsManager = taskListsManager –