Как получить данные табличного представления в detailsViewController - PullRequest
0 голосов
/ 03 июля 2019

В настоящее время я работаю над приложением, которое помещает данные API в табличное представление, а затем просматривает данные в detailsViewController.

Мой код выглядит примерно мне, и я начинаю задумываться, может быть, вся информация должнабыть в табличном представлении для меня, чтобы передать данные на другой контроллер.Можно ли передать данные другому контроллеру без необходимости помещать всю информацию в ячейку табличного представления?

РЕДАКТИРОВАТЬ: Если бы я должен был получать данные в моем detailsViewController из массива fetchedSpell, как бы я дал знать detailsViewController знатькакие данные показывать на основе выбранной ячейки?

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

Выбор вида таблицы

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: 
  IndexPath) {

    let storyBoard: UIStoryboard = UIStoryboard(name:"Main", 
bundle: nil)
    let SpellDetailsViewController = 
storyBoard.instantiateViewController(withIdentifier: 
 "SpellDetailsViewController") as! SpellDetailsViewController
    let detail = fetchedSpell[indexPath.row]

    SpellDetailsViewController.spellText = detail.spell
    SpellDetailsViewController.effectText = detail.effects
    SpellDetailsViewController.typeText = detail.types

    self.present(SpellDetailsViewController, animated: true, 
completion: nil)
}

Контроллер деталей заклинаний

class SpellDetailsViewController: UIViewController, 
UINavigationControllerDelegate {
@IBOutlet weak var spellLabel: UILabel!
@IBOutlet weak var typeLabel: UILabel!
@IBOutlet weak var effectLabel: UILabel!

var spellText: String!
var typeText: String!
var effectText : String!
override func viewDidLoad() {
    super.viewDidLoad()

    spellLabel.text = spellText
    typeLabel.text = typeText
    effectLabel.text = effectText
}

Tablieview and Details Page

1 Ответ

1 голос
/ 03 июля 2019

Согласно скриншоту, вы используете segue, поэтому вы не должны создавать экземпляр контроллера.

  • (Re) подключите последовательность из ячейки табличного представления (вместо контроллера) и установите идентификатор в "SpellDetailsViewController"
  • Удалить весь didSelectRowAt метод
  • Реализация prepare(for segue. Когда пользователь нажимает на ячейку, вызывается prepare(for segue, и ячейка передается как sender

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        guard segue.identifier == "SpellDetailsViewController",
            let cell = sender as? UITableViewCell,
            let indexPath = tableView.indexPath(for: cell) else { return }
    
        let detail = fetchedSpell[indexPath.row] 
        let spellDetailsViewController = segue.destination as! SpellDetailsViewController
        spellDetailsViewController.spellText = detail.spell
        spellDetailsViewController.effectText = detail.effects
        spellDetailsViewController.typeText = detail.types  
    }
    
  • А в подробном представлении контроллер объявляет свойства строки как необязательную пустую строку, например

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