Swift - didSelectRowAt indexPath 下一个 VC 没有出现/没有故事板/

Posted

技术标签:

【中文标题】Swift - didSelectRowAt indexPath 下一个 VC 没有出现/没有故事板/【英文标题】:Swift - didSelectRowAt indexPath next VC not showing up /no storyboards/ 【发布时间】:2020-03-25 19:12:11 【问题描述】:

“didSelectRowAt indexPath”有问题,因为 row 没有触发下一个 VC。 在控制台中,我已经为特定行打印了字符串,因此选择一行可以正常工作,但是下一个 VC 没有打开。 我当然试图找到堆栈溢出和谷歌的解决方案,但是我找不到解决方案。 下面我粘贴: MainVC -> 视图控制器 和 下一个 VC -> DetailViewCONtroller

提前感谢您的帮助。

主要风投:

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])")
  

第二个VC:

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
  


【问题讨论】:

检查 self.navigationController 是否为 nil。 【参考方案1】:

我假设第一个视图控制器不在导航堆栈中。当您尝试将新的视图控制器推送到导航堆栈时,添加一个断点并确定 navigationController 是否不为零。

【讨论】:

天啊!!!你帮了我很多!!!事实上,我的第一个 VC 中没有导航,这就是导致这个问题的原因!!!谢谢!!!!!!

以上是关于Swift - didSelectRowAt indexPath 下一个 VC 没有出现/没有故事板/的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中 didSelectRowAt 函数上的 Switch 语句

Swift UITableView 仅在我按下几秒钟时调用 didSelectRowAt

Swift 3 中的“didSelectRowAt indexPath”问题

Swift - didSelectRowAt indexPath 下一个 VC 没有出现/没有故事板/

didSelectRowAt Swift 3 即使在设置了委托和数据源后也没有调用

如何在 swift 中从情节提要中的 didSelectRowAt indexPath 打开视图标签栏控制器?