Swift - didSelectRowAt indexPath next V C не отображается / нет раскадровок / - PullRequest
0 голосов
/ 25 марта 2020

У меня проблема с "didSelectRowAt indexPath", потому что ряд не запускается следующий V C. В консоли я напечатал строку для конкретной строки, поэтому выбор строки работает, но следующая V C не открывается. Я, конечно, пытался найти решение о переполнении стека и Google, однако я не могу найти решение. Ниже я вставляю: MainV C -> ViewController и следующий V C -> DetailViewCOntroller

Заранее благодарен за помощь.

Main V C:

import UIKit

class ViewController: UIViewController {

  let cellID = "Picture"
  let tableViewCell = TableViewCell()

  let tableWithImages: UITableView = {
    let table = UITableView()
    table.rowHeight = 50
    table.translatesAutoresizingMaskIntoConstraints = false
    return table
  }()

  var pictures: [String] = [String]()

  override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = .white
    tableWithImages.delegate = self
    tableWithImages.dataSource = self
    tableWithImages.register(TableViewCell.self, forCellReuseIdentifier: cellID)
    fileManagerSetup()
    setupView()
  }

  func fileManagerSetup(){
   let fm = FileManager.default
    let path = Bundle.main.resourcePath!
    let items = try! fm.contentsOfDirectory(atPath: path)
    for item in items {
      if item.hasPrefix("nssl"){
        pictures.append(item)
      }
    }
    print(pictures)
  }

  private func setupView(){
    view.addSubview(tableWithImages)
    tableWithImages.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true
    tableWithImages.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true
    tableWithImages.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true
    tableWithImages.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
  }
}

extension ViewController: UITableViewDelegate, UITableViewDataSource {
   func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return pictures.count
  }

   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPath)
    cell.textLabel?.text = pictures[indexPath.row]
    return cell
  }

  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let detailVC = DetailViewController()
    detailVC.selectedImage = pictures[indexPath.row]
      self.navigationController?.pushViewController(detailVC, animated: true)
    print("Row tapped: \(pictures[indexPath.row])")
  }
}

Второй V C:

import UIKit

class DetailViewController: UIViewController {

  var imageView: UIImageView = {
    var picture = UIImageView()
    picture.translatesAutoresizingMaskIntoConstraints = false
    return picture
  }()

  var selectedImage: String?

    override func viewDidLoad() {
        super.viewDidLoad()
      view.backgroundColor = .white
      setupView()
      if let imageToLoad = selectedImage {
        imageView.image = UIImage(named: imageToLoad)
      }
    }

  private func setupView(){
    view.addSubview(imageView)
    imageView.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true
    imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true
    imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true
    imageView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
  }

}

1 Ответ

0 голосов
/ 25 марта 2020

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

...