Лучший способ сообщить UITableView, какие данные должны отображаться в Swift - PullRequest
0 голосов
/ 30 мая 2018

Я новичок в Swift и следовал некоторым урокам.Они показывают, как вы предполагаете использовать UITableView с помощью UITableViewController.Данные, отображаемые в UITableView, хранятся в массиве внутри UITableViewController.Я в порядке.

Исходя из этого, я попытался создать UITableView с двумя массивами:

struct Spending {
    var title: String
    var amount: Float
    var date: Date?
 }

class TableViewControllerSpending: UITableViewController, SpendingProtocol {
        var spendingsTemporary : [Spending] = [Spending(title: "Shoes", amount: 245.99, date: Date())]
        var spendingsPermanent : [Spending] = [Spending(title: "Taxes", amount: 125.50, date: Date())]
}

Я хотел бы использовать 2 массива для отображения обоих в зависимости отнавигация.Например, когда вы нажимаете кнопку «Мои постоянные расходы», UITableView отображает только «постоянные» данные массива, или если вы нажимаете «Все мои расходы», вы можете видеть содержимое 2 массивов.

Как лучше всего сообщить UITableView, какие данные должны отображаться?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

На основании вашего комментария лучшее решение - сделать TableViewControllerSpending универсальным контроллером представления, который может отображать предоставленный массив Spending объектов.

class TableViewControllerSpending: UITableViewController, SpendingProtocol {
    var spendings = [Spending]()
}

Реализовать все обычные методы табличного представленияоснованный на массиве spendings.

В некотором подходящем методе prepareSegue, вызываемом из двух кнопок, вы получаете доступ к TableViewControllerSpending в качестве контроллера назначения, а затем на основании нажатой кнопки выустановите свойство spendings с одним из двух основных списков Spendings, которые у вас есть.

При таком подходе ваш TableViewControllerSpending не знает, что существует два отдельных списка данных.Он просто знает, как показать список.

0 голосов
/ 30 мая 2018

Вы можете попробовать

var isPermanent  = true

//

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

    return  isPermanent ? spendingsPermanent.count : spendingsTemporary.count 

}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = areaSettTable.dequeueReusableCell(withIdentifier:CellIdentifier1) as! notifyTableViewCell

   if isPermanent {

  }
  else {

  }

    return cell
}

//

Изменить isPermanent в соответствии с нажатой кнопкой и затем

tableView.reloadData()

Примечание Вы можете создать один массив и назначить ему текущий массив и иметь дело только с одним массивом

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