Два представления таблиц в разных контроллерах представления, один рабочий, а другой нет (Swift 4) - PullRequest
0 голосов
/ 07 мая 2020

Я стремлюсь создать приложение, в котором есть два списка в двух разных представлениях: 1 называется Список покупок, а второй - список кладовой. Это в шаблоне приложения с вкладками. Сначала я настроил вкладку списка покупок с представлением, содержащим табличное представление, которое получает данные для заполнения представления из общего файла переменных, и это отлично работает. Однако я скопировал и вставил тот же код во второй контроллер представления (изменение всех переменных и ссылок, ВКЛЮЧАЯ ссылку @IBOutlet), и на этой вкладке отображается только пустое табличное представление.

Вид вкладки списка покупок Контроллер

class ShoppingListTabViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {


@IBOutlet weak var ShoppingListTableView: UITableView!

//Set the # of rows in the shopping List
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { //Set the # of rows
    return(Common.Global.shoppingList.count)
}

//Define what a cell looks like
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    //Create a cell with the default style and the id of the Table in the Shopping List tab
    let shoppinglistItem = UITableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: "shoppingListCell")
    shoppinglistItem.textLabel?.text = Common.Global.shoppingList[indexPath.row] //Fill the table with the items from the  shoppingList
    return(shoppinglistItem)

}

}

Контроллер представления вкладки «Список кладовой»

class PantryListTabViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {


@IBOutlet weak var PantryListTableView: UITableView!

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    //Set the number of rows in table
    return(Common.Global.pantryItems.count)
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    //Setup the cell which each item will be stored in
    let pantryItemsCell = tableView.dequeueReusableCell(withIdentifier: "PantryListItem", for: indexPath)

    pantryItemsCell.textLabel!.text = Common.Global.pantryItems[indexPath.row]
    return(pantryItemsCell)
}

}

Они оба ссылаются тот же общий файл, который содержит два списка, один из которых называется ShoppingList, а другие - кладовая

Мне очень жаль, если я заснул, задавая вопрос.

Ответы [ 2 ]

0 голосов
/ 10 мая 2020

Ваш класс PantryListTabViewController уже соответствует обоим протоколам TableView (UITableViewDelegate и UITableViewDataSource)

Эти протоколы сообщают другим классам что этот класс (PantryListTabViewController) имеет реализовано некоторые специфические c методы или свойства

Однако TableView должен знать , что этот класс (PantryListTabViewController) - это класс, который TableView должен использовать для заполнения его содержимого и некоторых других вещей.

Следовательно, в вашем viewDidLoad() вам необходимо настроить свой class как Delegate и DataSource для TableView:

override func viewDidLoad() {

    // Call the super method.
    super.viewDidLoad()

    // Setup Delegate and DataSource for the TableView.
    tableView.delegate = self
    tableView.dataSource = self
}

Учтите, что вам нужен IBOutlet вашего TableView с именем tableView (вы, очевидно, можете переименовать его )

Надеюсь, это поможет!

0 голосов
/ 07 мая 2020
• 1000 *

В моем случае mytableview@IBOutletvar = ShoppingListTableView для контроллера представления списка покупок и PantryListTableView для контроллера представления списка кладовой.

...