Как я могу добавить ячейку в раздел UITableView с сохраненной информацией основных данных - PullRequest
0 голосов
/ 16 января 2019

У меня есть UITableView с 3 разделами, у меня есть 3 таблицы для каждого раздела, я использую 3 всплывающих окна, чтобы заполнить таблицы (Формула, Время, Шаг) для каждого раздела, на данный момент все работает отлично

var sections : [String] = []
var buttons : [Int] = []

sections = [" Formula:", " Time:", " Steps: "]
buttons = [1,2,3]

var formula : [Formula] = []
var time : [Time] = []
var step : [Step] = []

var fetchReultFormula : NSFetchedResultsController<Formula>!
var fetchResultTime : NSFetchedResultsController<Time>!
var fetchResultStep : NSFetchedResultsController<Step>!

В разделе tableView кода:

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return sections[section]
    }

func numberOfSections(in tableView: UITableView) -> Int {
    return sections.count
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        switch section {
        case 0:
            return formula.count
        case 1:
            return time.count
        default:
            return step.count
        }
    }

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell :UITableViewCell = UITableViewCell(style: .subtitle, reuseIdentifier: "mycell")

        switch (indexPath.section) {
        case 0:
            let result = formula[indexPath.row]
            cell.textLabel?.text = result.ing
            cell.detailTextLabel?.text = "\(result.cant) grs"
            cell.imageView?.image = UIImage(named: result.type!)
        case 1:
            let result = [indexPath.row]
            cell.textLabel?.text = result.name
            cell.detailTextLabel?.text = "\(resultado.min) min"
            cell.imageView?.image = UIImage(named: "time")
        default:
            let result = step[indexPath.row]
            cell.textLabel?.text = result.desc
            cell.detailTextLabel?.text = ""
            cell.imageView?.image = UIImage(named: "check")
        }
        return cell
    }

Когда я добавляю запись в любую таблицу через popUpView, как я могу добавить эту запись в соответствующий раздел, когда закрываю popUpView?

1 Ответ

0 голосов
/ 16 января 2019

В результате наших комментариев давайте вместе с делегацией посмотрим, сможем ли мы решить вашу проблему:

Объявите протокол, вы можете сделать это в другом файле или в вашем ViewController:

В этом протоколе есть метод выборки данных после добавления данных в FormulaViewController

protocol DataFetcherDelegate {
    func fetchData()
}


class ViewController: UIViewController {

Тогда следуйте этому протоколу от вашего ViewController:

class ViewController: UIViewController, DataFetcherDelegate {

После того, как вы согласитесь с протоколом, вам нужно будет внедрить метод fetchData внутри ViewController, здесь вы должны поместить запрос на выборку основных данных, чтобы получить обновленные данные:

func fetchData() {
    print("fetchingData")
    // write your data fetching code here, then make your arrays equal respectively again.
    // once fetching and assigning data to arrays are complete do:
    tableView.reloadData()
}

Теперь перейдите к FormulaViewController и добавьте переменную delegate, например:

class FormulaViewController: UIViewController {
    var delegate: DataFetcherDelegate?

Вернитесь к ViewController, тогда, когда бы вы ни создавали свой экземпляр FormulaViewController (я получил код ниже из вашего комментария, вам нужно также преобразовать VC в FormulaViewController, он немного обновлен, не используйте старый код) и присвойте ViewController как delegate из FormulaViewController:

let vc = storyboard!.instantiateViewController(withIdentifier: "formulaView") as! FormulaViewController
vc.delegate = self // assigning self as delegate of FormulaVC
self.present(vc, animated: true, completion: nil)

Теперь мы закончили с ViewController part, перейдем к FormulaViewController и сделаем следующее:

Прежде чем вы отклоните ваш popupView после успешного сохранения новых данных, теперь мы скажем нашим delegate (ViewController), чтобы они снова загружали основные данные, затем мы отклоним FormulaViewController:

//save your respective item to your core data, formula, time or step

// then for the sake of example, lets add a Formula:

let newFormula = Formula(/*with your core data context*/)
//save to your core data with context. like persistentContainer.viewContext.save(), I dont know how you implemented that.
delegate?.fetchData()
dismiss(animated: true, completion: nil)

Теперь, мы надеемся, что после отклонения FormulaViewController данные ViewController также будут обновлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...