Как сделать так, чтобы ячейки в табличном представлении использовали массив для своих данных после изменения содержимого массива? - PullRequest
0 голосов
/ 03 июля 2019

Я пишу короткое приложение в Swift, которое имеет два экрана. На первом экране пользователь вводит данные и сохраняет их, затем на втором экране данные отображаются в виде tableView. Однако я не могу заставить tableView адаптироваться к измененному array.

Я оглянулся и, кажется, не могу найти решение, однако я новичок в этом, поэтому я могу искать не в том месте.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableview.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! BunchOfCells
    cell.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 0)
    tableview.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 0)
    if tasks.count != 0 {cell.label.text = tasks[indexPath.item]["Title"]}
    return cell
}

func createTask(){
    let decider = UserDefaults.standard.object(forKey: "buttonPressed") as? Bool
    if (decider == true){
        let nameOfTask = UserDefaults.standard.object(forKey: "taskName") as! String
        let importanceOfTask = UserDefaults.standard.object(forKey: "importance") as! String
        let dateOfTask = UserDefaults.standard.object(forKey: "taskDate") as! String
        let desOfTask = UserDefaults.standard.object(forKey: "taskDescription") as! String
        taskInfo["Title"] = nameOfTask
        taskInfo["Importance"] = importanceOfTask
        taskInfo["Date"] = dateOfTask
        taskInfo["Description"] = desOfTask
        tasks.append(taskInfo)
        print(tasks)          
    }


var tasks: [[String:String]] = [] as Array

var taskInfo: [String:String] = ["Title":"", "Importance":"", "Date":"", "Description":""]



let tableview: UITableView = {

    let tv = UITableView()

    tv.translatesAutoresizingMaskIntoConstraints = false

    tv.separatorColor = UIColor.white

    return tv

}()



func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    let NumOfCell = tasks.count

    return NumOfCell

}

tasks - это array, хранящий кратное число dictionaries с аналогичным содержимым.

Моя проблема в том, что при добавлении другого dictionary к array cells в табличном представлении не изменяется. Любая помощь будет оценена :)

1 Ответ

0 голосов
/ 03 июля 2019

Позвоните reloadData() на tableView после того, как вы создали новое задание, т.е.

func createTask(){
    let decider = UserDefaults.standard.bool(forKey: "buttonPressed")
    if decider {
        //your rest of the code...
    }
    tableView.reloadData()
}

Не забудьте создать outlet для tableView в вашемviewController.

@IBOutlet weak var tableView: UITableView!

И, конечно, как предложил @vadian, реализация tableView(_:cellForRowAt:) должна быть такой, как

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! BunchOfCells
    cell.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 0)
    cell.label.text = tasks[indexPath.item]["Title"]
    return cell
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...